Рисование в java

Модератор: Absurd

Ответить
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Доброго времени суток!

Создаю JFrame с BorderLayout-том, в цетральную зону кидаю JPanel и начинаю рисовать на нем используя метод getGraphics(). Все замечательно. После чего хочу изменить размеры JFrame-а, происходит перерисовка и рисунок исчезает. Все логично, но после прекращения изменения размеров окна никак не могу востановить рисунок. Использовал метод "ComponentResized(java.awt.event.ComponentEvent evt)" для JPanel. Пока тянешь за край все нормально, как только остановился изменять размеры все пропадает. Подскажите метод который надо использовать, что бы востановить рисунок после изменения размеров JFrame-а.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

"Не пытайся согнуть ложку. Это невозможно. Вместо этого попытайся понять истину:
Нет никакой ложки. Тогда ты увидишь, что это гнётся не ложка , а ты сам."

так же и тут, в Яве:

рисовать надо НЕ НА панели (getGraphics()),
а прорисовывать детали САМОЙ панели (paintComponent),

тогда панель будет правильно перерисовываться и никакие ресайзы мешать не будут:

Код: Выделить всё

MyPanel extends JPanel {
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		// рисовать тут
	}
}
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Спасибо!

Еще один банальный вопрос. Как вывести на экран точку (или пиксель, что одно и то же), а лучше массив точек? Не рисовать же их с помощью "drawLine".
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Gugle,
пиксель настолько маленький, что рисовать его отдельно просто не смысла (его не видно).
И если ты хочешь зарисовать все пиксели панели - это будет очень неэффективно (долго).

Потому ответ на твой вопрос зависит от постановки задачи.

1. Если надо рисовать мышкой (нажимаешь кнопку, тянешь - рисуется кривая линия, как карандаш в MS Paint),
тогда рисуются именно линии! от прошлого положения мышки до нынешнего (мышка сдвигается минимум на два пикселя, по моему)

2. Если надо рисовать массив точек, чтобы нарисовать график - я бы рисовал через drawOval(x, y, width, height) с width и height - диаметр точки.

3. Если нужно нарисовать рисунок (зарисовать всю панель) - стоит посмотреть в сторону drawImage

4. И если ничего не подходит из вышесказанного, и на самом деле надо рисовать именно пиксели,
тогда .. либо линию, либо овал с диаметром 1 ..
Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Спасибо, Oscar!
Ответить