【发布时间】:2014-09-05 22:46:45
【问题描述】:
假设我制作了一个简单的图形应用程序。它有两个类,主类和扩展 JPanel 的称为“面板”的第二个类。 主类只是一个包含 JPanel 的 JFrame。以下是它的内容:
public static Panel panel = new Panel();
public static void main(String[] args) {
JPanel p = new Panel();
JFrame fr = new JFrame();
fr.setSize(600, 600);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setLocationRelativeTo(null);
fr.setVisible(true);
fr.add(p);
while (true) {
fr.repaint();
if (panel.test) panel.g2d.drawRect(30, 30, 40, 40);
}
}
第二个类使用 Graphics2D 创建 JPanel 的内容。它还具有在paintComponent() 方法中更改的变量。以下是它的内容:
Graphics2D g2d;
boolean test = false;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
test = true;
g2d.setColor(Color.RED);
g2d.drawRect(10, 10, 20, 20);
}
但是,问题是:在paintComponent() 方法执行后,test 和g2g 似乎都没有改变。尽管 paintComponent() 方法可以很好地绘制矩形,但 main 方法的 while 循环中的代码永远不会绘制矩形。在 main 方法中,test 和 g2g 似乎总是分别为 false 和 null。我在这里想念什么?无论如何在paintComponent()方法之外使用graphics2D?
【问题讨论】:
标签: java swing methods null graphics2d