Вопрос

Я пытаюсь создать Java-апплет, который позволит мне нарисовать структуру данных графа на холсте. Я сделаю это, щелкнув там, где я хочу создать узлы, и щелкнув узлы, чтобы соединить их. Проблема в том, что я не могу заставить метод paint () вести себя правильно. Я добавляю новые узлы на график (и квадраты на холсте) внутри метода mousePressed (MouseEvent e) , используя

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Все работает нормально, пока я не изменю размеры окна, а затем все заполненные прямоугольники не исчезнут. Я переопределил метод рисования просто пустым методом, но все равно происходит то же самое. Я не могу добавить команды fillRect внутри paint (), потому что я не знаю, какие прямоугольники существуют, пока пользователь не взаимодействует с ним с помощью мыши.

Как я могу использовать g.fillRect () внутри методов прослушивателя мыши и заставить их придерживаться?

Это было полезно?

Решение

Проблема в том, что место, куда вы рисуете, не является постоянным. В любой момент вы можете потерять все, что вы к нему потянули. Метод paint (Graphics) вызывается, когда это происходит. Вам нужно будет либо перерисовывать всю картинку каждый раз, когда это происходит, либо вам нужно отложить холст для рисования и копирования содержимого графика вашего апплета по мере необходимости.

Вот как можно создать и нарисовать изображение:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Затем в своем методе рисования используйте метод DrawImage (...) для Graphics, чтобы отобразить созданное вами изображение.

Другие советы

Я не знаю, правильно ли я читаю, но почему бы просто не сохранить местоположение последнего щелчка в переменной, которая будет нарисована позже, когда вызывается метод paint ()?

Графика временная. Когда область испачкается, она будет перекрашена.

Лучший способ - создать BufferedImage, нарисовать его на mousePressed и вызвать перерисовку.
Когда вызывается краска, нарисуйте изображение на переданный графический объект. Таким образом, вам не нужно хранить прямоугольники, и вы получите буфер, который улучшит производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top