Graphics g и как им управлять - Java
Формулировка задачи:
Имеется примерно такой код:
Он вполне рабочий. Только вот квадрат из функции movedRect() не отрисовывается. Судя по всему getGraphics() в строке 32 не отрабатывает как нужно. Чем его заменить?
Можно конечно взять этот объект из буфера buffer.createGraphics, но тогда вызвать его можно только из данного класса.
А если мне (ну например) нужно сделать что-то вроде этого:
То мне выдает NullPointer (это понятно, буфер существует не всегда). Так вот, можно ли как-то этот Graphics получить и передать в другое место?
Или в методе rebuildBuffer должна быть вообще вся графика. Нелогично это как-то.
Кому лень читать код: мне нужно чтобы в rebuildBuffer или paintComponent остались только вызовы функций, а конкретные отрисовываемые объекты приходили откуда-то извне. Куда копать?
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);
}
}package main;
public class Main {
public static void main(String[] args) {
CanvasMain frame = new CanvasMain();
frame.movedRect(50, 50);
}
}Решение задачи: «Graphics g и как им управлять»
textual
Листинг программы
hero.draw(g2d);