考虑我有一个JFrame和一个JPanel对象的情况,其中JPanel对象嵌入在JFrame中。我的理解是每个图形组件都有自己的图形上下文。所以我的JFrame有自己的图形上下文,我的JPanel有自己的图形上下文,这些上下文不同。我把一个小测试放在一起,但似乎暗示其他方面:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
Graphics frameContext = frame.getGraphics();
Graphics panelContext = panel.getGraphics();
if (frameContext == panelContext){
System.out.println("The contexts are the same.");
} else {
System.out.println("The contexts are different.");
}
输出是“上下文是相同的。”。为什么会这样?是否可以为JPanel和JFrame提供不同的图形上下文?我希望能够绘制到JPanel图形上下文,但不能绘制JFrame上下文。
此问题与Wrong JPanel displayed in CardLayout. Issues with getGraphics()有关。我相信这个问题的答案可能会以某种方式解决另一个问题。
答案 0 :(得分:1)
哇。对我来说是愚蠢的错误。等式测试返回true,因为两者都是null。
代码应更改为:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
frame.setVisible(true);
Graphics frameContext = frame.getGraphics();
Graphics panelContext = panel.getGraphics();
if (frameContext.equals(panelContext)){
System.out.println("The contexts are the same.");
} else {
System.out.println("The contexts are different.");
}
在此修改之后,测试的输出是“上下文不同”。因此,这不能回答Wrong JPanel displayed in CardLayout. Issues with getGraphics()的问题。