Доброго времени суток!
Создаю JFrame с BorderLayout-том, в цетральную зону кидаю JPanel и начинаю рисовать на нем используя метод getGraphics(). Все замечательно. После чего хочу изменить размеры JFrame-а, происходит перерисовка и рисунок исчезает. Все логично, но после прекращения изменения размеров окна никак не могу востановить рисунок. Использовал метод "ComponentResized(java.awt.event.ComponentEvent evt)" для JPanel. Пока тянешь за край все нормально, как только остановился изменять размеры все пропадает. Подскажите метод который надо использовать, что бы востановить рисунок после изменения размеров JFrame-а.
Рисование в java
Модератор: Absurd
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
"Не пытайся согнуть ложку. Это невозможно. Вместо этого попытайся понять истину:
Нет никакой ложки. Тогда ты увидишь, что это гнётся не ложка , а ты сам."
так же и тут, в Яве:
рисовать надо НЕ НА панели (getGraphics()),
а прорисовывать детали САМОЙ панели (paintComponent),
тогда панель будет правильно перерисовываться и никакие ресайзы мешать не будут:
Нет никакой ложки. Тогда ты увидишь, что это гнётся не ложка , а ты сам."
так же и тут, в Яве:
рисовать надо НЕ НА панели (getGraphics()),
а прорисовывать детали САМОЙ панели (paintComponent),
тогда панель будет правильно перерисовываться и никакие ресайзы мешать не будут:
Код: Выделить всё
MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
// рисовать тут
}
}
Спасибо!
Еще один банальный вопрос. Как вывести на экран точку (или пиксель, что одно и то же), а лучше массив точек? Не рисовать же их с помощью "drawLine".
Еще один банальный вопрос. Как вывести на экран точку (или пиксель, что одно и то же), а лучше массив точек? Не рисовать же их с помощью "drawLine".
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
Gugle,
пиксель настолько маленький, что рисовать его отдельно просто не смысла (его не видно).
И если ты хочешь зарисовать все пиксели панели - это будет очень неэффективно (долго).
Потому ответ на твой вопрос зависит от постановки задачи.
1. Если надо рисовать мышкой (нажимаешь кнопку, тянешь - рисуется кривая линия, как карандаш в MS Paint),
тогда рисуются именно линии! от прошлого положения мышки до нынешнего (мышка сдвигается минимум на два пикселя, по моему)
2. Если надо рисовать массив точек, чтобы нарисовать график - я бы рисовал через drawOval(x, y, width, height) с width и height - диаметр точки.
3. Если нужно нарисовать рисунок (зарисовать всю панель) - стоит посмотреть в сторону drawImage
4. И если ничего не подходит из вышесказанного, и на самом деле надо рисовать именно пиксели,
тогда .. либо линию, либо овал с диаметром 1 ..
пиксель настолько маленький, что рисовать его отдельно просто не смысла (его не видно).
И если ты хочешь зарисовать все пиксели панели - это будет очень неэффективно (долго).
Потому ответ на твой вопрос зависит от постановки задачи.
1. Если надо рисовать мышкой (нажимаешь кнопку, тянешь - рисуется кривая линия, как карандаш в MS Paint),
тогда рисуются именно линии! от прошлого положения мышки до нынешнего (мышка сдвигается минимум на два пикселя, по моему)
2. Если надо рисовать массив точек, чтобы нарисовать график - я бы рисовал через drawOval(x, y, width, height) с width и height - диаметр точки.
3. Если нужно нарисовать рисунок (зарисовать всю панель) - стоит посмотреть в сторону drawImage
4. И если ничего не подходит из вышесказанного, и на самом деле надо рисовать именно пиксели,
тогда .. либо линию, либо овал с диаметром 1 ..
Спасибо, Oscar!