枚举JFrame上的所有控件

时间:2014-12-14 22:07:57

标签: java swing jframe jpanel

我是Java的新手,我正在尝试将所有JPanel的visible属性设置为false 在我的JFrame(框架。)

当我执行以下操作时,它会向控制台返回null:

public void mouseClicked(MouseEvent e){
    for (Component c : frame.getComponents()) {
        System.out.println(c.getName());
        if (c instanceof JPanel) { 
            ((JPanel)c).setVisible(false);
        }
    }
    panelDispatch.setVisible(true);
    panelDispatch.requestFocus();
}

我想要它做的是将所有面板的可见性设置为false 将选定的面板可见性设置为true。 3个JPanels被添加到框架中。

我在这里做错了什么?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

将组件添加到ContentPane的{​​{1}}而不是JFrame。您看到RootPane显示在控制台上,因为您可能没有设置组件的name property

null

答案 1 :(得分:2)

我不知道为什么你看到null,我不确定你看到它的方式,也许是NullPointerException,但我知道你似乎正在删除JFrame的contentPane,glassPane和rootPane无意中发生了危险的事情。相反,只需使用一个CardLayout,它可以让您轻松简单地交换GUI视图,因为这正是CardLayout的构建方式。有关详细信息,请查看CardLayout Tutorial


修改
有关使用CardLayout的GUI的示例,请查看:

这个是不寻常的,因为它使用CardLayout并且有一个面板淡入另一个面板: