Graphics g и как им управлять - Java

Узнай цену своей работы

Формулировка задачи:

Имеется примерно такой код:
package gui;
 
public class CanvasMain extends JPanel {
    BufferedImage buffer;
 
    private void rebuildBuffer() {
        int wigth = getWidth();
        int heigth = getHeight();
        buffer = new BufferedImage(wigth, heigth, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = buffer.createGraphics();
        g2d.setColor(Color.RED);
        g2d.drawLine(0, 0, 500, 300);
        myLine(g2d);
        movedRect(20, 20);
    }
 
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        setBackground(Color.BLACK);
        if (buffer == null) {
            rebuildBuffer();
        }
        g.drawImage(buffer, 0, 0, this);
    }
 
    private void myLine(Graphics g2d) {
        g2d.setColor(Color.YELLOW);
        g2d.drawLine(200, 100, 0, 300);
    }
    
    public void movedRect(int x, int y) {
        Graphics2D g2d = (Graphics2D) getGraphics(); //вот эта строка
        g2d.fillRect(x, y, 50, 50);
    }
}
Он вполне рабочий. Только вот квадрат из функции movedRect() не отрисовывается. Судя по всему getGraphics() в строке 32 не отрабатывает как нужно. Чем его заменить? Можно конечно взять этот объект из буфера buffer.createGraphics, но тогда вызвать его можно только из данного класса. А если мне (ну например) нужно сделать что-то вроде этого:
package main;
 
public class Main {
 
    public static void main(String[] args) {
        CanvasMain frame = new CanvasMain();
        frame.movedRect(50, 50);
    }
}
То мне выдает NullPointer (это понятно, буфер существует не всегда). Так вот, можно ли как-то этот Graphics получить и передать в другое место? Или в методе rebuildBuffer должна быть вообще вся графика. Нелогично это как-то. Кому лень читать код: мне нужно чтобы в rebuildBuffer или paintComponent остались только вызовы функций, а конкретные отрисовываемые объекты приходили откуда-то извне. Куда копать?

Решение задачи: «Graphics g и как им управлять»

textual
Листинг программы
hero.draw(g2d);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5