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

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

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

Имеется примерно такой код:
Листинг программы
  1. package gui;
  2. public class CanvasMain extends JPanel {
  3. BufferedImage buffer;
  4. private void rebuildBuffer() {
  5. int wigth = getWidth();
  6. int heigth = getHeight();
  7. buffer = new BufferedImage(wigth, heigth, BufferedImage.TYPE_INT_ARGB);
  8. Graphics2D g2d = buffer.createGraphics();
  9. g2d.setColor(Color.RED);
  10. g2d.drawLine(0, 0, 500, 300);
  11. myLine(g2d);
  12. movedRect(20, 20);
  13. }
  14. protected void paintComponent(Graphics g) {
  15. super.paintComponent(g);
  16. setBackground(Color.BLACK);
  17. if (buffer == null) {
  18. rebuildBuffer();
  19. }
  20. g.drawImage(buffer, 0, 0, this);
  21. }
  22. private void myLine(Graphics g2d) {
  23. g2d.setColor(Color.YELLOW);
  24. g2d.drawLine(200, 100, 0, 300);
  25. }
  26. public void movedRect(int x, int y) {
  27. Graphics2D g2d = (Graphics2D) getGraphics(); //вот эта строка
  28. g2d.fillRect(x, y, 50, 50);
  29. }
  30. }
Он вполне рабочий. Только вот квадрат из функции movedRect() не отрисовывается. Судя по всему getGraphics() в строке 32 не отрабатывает как нужно. Чем его заменить? Можно конечно взять этот объект из буфера buffer.createGraphics, но тогда вызвать его можно только из данного класса. А если мне (ну например) нужно сделать что-то вроде этого:
Листинг программы
  1. package main;
  2. public class Main {
  3. public static void main(String[] args) {
  4. CanvasMain frame = new CanvasMain();
  5. frame.movedRect(50, 50);
  6. }
  7. }
То мне выдает NullPointer (это понятно, буфер существует не всегда). Так вот, можно ли как-то этот Graphics получить и передать в другое место? Или в методе rebuildBuffer должна быть вообще вся графика. Нелогично это как-то. Кому лень читать код: мне нужно чтобы в rebuildBuffer или paintComponent остались только вызовы функций, а конкретные отрисовываемые объекты приходили откуда-то извне. Куда копать?

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут