我目前正在尝试制作一个可以绘制内容的画布,并将其显示在JFrame中。
为此,我打算在一个JPAnel组件中有一个bufferedImage,paintComponent方法可以从中绘制。
理想情况下,从给定的JFrame中我希望能够引用这个缓冲的图像,然后使用其Graphics2D绘制内容,paintComponent方法可以在使用缓冲的图像绘制时显示它。
我这样做是为了避免直接使用paintcomponent方法,我希望能够从程序中的任何位置引用这个画布,并在调用帧repaint()方法时绘制它。
class MyPanel extends JPanel {
BufferedImage img = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
Graphics2D imgG2 = img.createGraphics();
public Graphics2D getGraphics() {
return imgG2;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int w = img.getWidth();
int h = img.getHeight();
g2.drawImage(img, 0, 0, w, h, null);
}
}
class Main {
private static JFrame createAndShowGui() {
JFrame frame = new JFrame("droneFrame");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new MyPanel());
frame.setSize(500, 500);
frame.setResizable(false);
frame.setVisible(true);
return frame;
}
public static void main(String args[]) {
JFrame frame = createAndShowGui();
//Something here to reference the inner Jpanels imgG2 field, and draw to it.
frame.repaint();
//Draw whatever is currently in the buffered image.
}
}
但是,我不知道如何做到这一点,因为frame.getComponent(0)只返回一个Component,而不是它的特定组件类型。
提前致谢。
答案 0 :(得分:0)
为了解决这个问题,您需要将JFrame的内容窗格设置为JPanel,然后引用缓冲图像的图形,您需要获取JFrame的内容窗格,并将其向下转换为特定类型MyPanel。
现在您的内容窗格格式正确,并且可以引用图形,因为它现在具有该字段。