Java рисовать фигуры в bufferedImage извне paintComponent ()? - PullRequest
0 голосов
/ 20 мая 2018

Вероятно, об этом немного спрашивали, но мне нужна помощь с рисованием фигур.Итак, у меня есть класс Draw, который расширяет JPanel.

. Я хочу иметь возможность рисовать овал вне метода paintComponent();.Поэтому, чтобы загрузить все мои изображения, я пытаюсь нарисовать фигуры в BufferedImage.Но у меня нет подходящего объекта Graphics.

Поэтому мой вопрос таков: как бы я мог получить подходящий объект Graphics для рисования с помощью моего JPanel или как рисовать внутри метода paintComponentи сможете назвать его из другого класса?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Как получить правильный объект Graphics для рисования на моем JPanel или как рисовать внутри метода paintComponent и иметь возможность вызывать его из другого класса?

Вынет.Вы никогда не должны вызывать какой-либо метод paint вручную.В фоновом режиме происходит много всего, что вы не контролируете, когда компонент закрашивается таким образом.

Если вы хотите «напечатать» компонент, вам следует использовать paintAll.

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
componentToBePrinted.printAll(g2d);
g2d.dispose();

В качестве альтернативы можно использовать BufferedImage и рисовать вместо него ...

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setColor(Color.BLACK);
g2d.draw(new Rectangle2D.Double(10, 10, 80, 80));
g2d.draw(new Ellipse2D.Double(10, 10, 80, 80));
g2d.dispose();

После этого можно будет нарисовать компонент, используя Graphics#drawImage

0 голосов
/ 20 мая 2018

Вы получаете объект Graphics из BufferedImage через getGraphics() или объект Graphics2D через createGraphics().Затем вы рисуете изображение в paintComponent, вызывая drawImage для его параметра Graphics.Утилизируйте объект Graphics BufferedImage, когда вы закончите использовать его, так как вы его создали.Не располагайте объект Graphics, переданный в paintComponent, поскольку JVM сделала это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...