如何获得嵌入式图形组件的独特图形上下文?

时间:2011-11-28 23:06:59

标签: java swing graphics jframe jpanel

考虑我有一个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()有关。我相信这个问题的答案可能会以某种方式解决另一个问题。

1 个答案:

答案 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()的问题。