В вашей реализации JPanel прямоугольники исчезают, поскольку метод Paint() перезаписывает предыдущие рисунки. Чтобы предотвратить это, мы модифицируем наш подход:
Вместо того, чтобы напрямую рисовать на JPanel, мы используем BufferedImage (canvasImage) в качестве поверхности рисования. Это позволяет нам постоянно изменять изображение, не затрагивая предыдущие рисунки.
Вот модифицированный метод Paint(), который использует CanvasImage для рисования:
@Override
public void paint(Graphics g) {
super.paint(g); // Handle inherited painting tasks
Graphics2D bg = (Graphics2D) g;
bg.drawImage(canvasImage, 0, 0, this);
}
Инициализируйте CanvasImage в конструкторе JPanel следующим образом:
canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
И установите графический контекст для рисования:
Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);
Теперь ваш метод DrawRect() может напрямую изменять CanvasImage:
public void DrawRect(int x, int y, int size, Color c) {
Graphics2D cg = canvasImage.createGraphics();
cg.setColor(c);
cg.fillRect(x, y, size, size);
}
Этот подход дает несколько преимуществ:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3