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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д