【发布时间】:2015-05-03 10:10:41
【问题描述】:
我不了解内部类 CHameleon 的功能。我不明白第 8 行理论上是什么意思。
我认为这意味着生成将在内部类之外访问的 JFrame 的重复版本,以便操作预期的 JFrame 对象。
编辑:代码带来空指针异常错误,因为从未引用过 JFrame 对象。 解决方案:将 JFrame 帧修改为最终的 JFrame 帧。
这就引出了一个问题,如果有多个 JFrame 会怎样?
例如,如果我有一个种植不同蔬菜的班级花园,我创建了一个内部班级颜色板来为这些蔬菜着色。是创建针对特定蔬菜的特定类的唯一解决方案吗?所以回答我自己的问题,在多个 JFrame 的情况下,它们会显示为不同类型的类,我的情况是?
public class LabelsButtonsPanelsandSnakes {
public static void main(String[] args){
final JFrame frame = new JFrame("Test");
JMenuBar menuBar = new JMenuBar(); //menubar
JMenu menu = new JMenu("Menu");
JMenuItem chameleon = new JMenuItem("Change Color");
class CHameleonaction implements ActionListener{ //inside class opens
JFrame frameHolder; //line 8
public void actionPerformed(ActionEvent e)
{
frame.getContentPane().setBackground(new Color(112,253,95));
}
} //inside class ends
chameleon.addActionListener(new CHameleonaction());
menuBar.add(menu);
frame.setJMenuBar(menuBar);
}
【问题讨论】:
-
我也不明白
frameHolder变量。那是错误的,看起来会导致 NullPointerException。 -
没错。看来我的问题是如何将 JFrame 对象从外部类桥接到内部类以进行操作。
-
这基本上只是糟糕的设计......这里没有嵌套类的理由。只需使用匿名 ActionListener 类实现,并使您需要访问的框架成为最终的(如果您真的需要它)。如果您希望我发布详细信息,请告诉我。
-
如果您询问的代码产生异常,在您的问题中告诉我们这将是明智和礼貌的。
-
根据可能的回答,您的上述问题可以通过将
frame设为final变量:final JFrame frame = new JFrame("Test");,然后从 ActionListener 中引用框架并删除 frameHolder 变量来解决。但无论如何,您的代码设计已关闭。
标签: java swing instantiation inner-classes