«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как постоянно рисовать прямоугольники в JPanel: использование BufferedImages, чтобы избежать перезаписи?

Как постоянно рисовать прямоугольники в JPanel: использование BufferedImages, чтобы избежать перезаписи?

Опубликовано 11 ноября 2024 г.
Просматривать:202

How to Draw Rectangles Permanently in a JPanel: Using BufferedImages to Avoid Overwriting?

Постоянное рисование прямоугольников

В вашей реализации JPanel прямоугольники исчезают, поскольку метод Paint() перезаписывает предыдущие рисунки. Чтобы предотвратить это, мы модифицируем наш подход:

Использование BufferedImage в качестве поверхности рисования

Вместо того, чтобы напрямую рисовать на JPanel, мы используем BufferedImage (canvasImage) в качестве поверхности рисования. Это позволяет нам постоянно изменять изображение, не затрагивая предыдущие рисунки.

Настраиваемый метод Paint()

Вот модифицированный метод 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);
}

Создание BufferedImage и его настройка

Инициализируйте 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);

Рисование прямоугольников на BufferedImage

Теперь ваш метод 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);
}

Дополнительные возможности

Этот подход дает несколько преимуществ:

  • Постоянное рисование: прямоугольники постоянно рисуются в BufferedImage.
  • Оптимизированное рисование: вместо перерисовки всего JPanel обновляются только измененные части изображения.
  • Поддерживает отмену/повтор действия (потенциально): автор отслеживая изменения изображения, вы можете реализовать функцию отмены/повтора.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3