Как получить правильный объект 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