如何在JFrame上为所有JPanel设置setVisible? 我知道我可以为每个面板使用JFrame.JPanel.setVisible,但我想为所有人做这些。
这非常有用,因为我不知道巫婆面板是可见的。所以我希望在行动后隐藏所有面板并显示1或2个面板。
答案 0 :(得分:4)
简单解决方案:
将所有面板存储为实例或列表
通用解决方案:
迭代小部件树
private void setAllChildPanelsVisible(Container parent) {
Component[] components = parent.getComponents();
if (components.length > 0) {
for (Component component : components) {
if (component instanceof JPanel) {
((JPanel) component).setVisible(true);
}
if (component instanceof Container) {
setAllChildPanelsVisible((Container) component);
}
}
}
}
如何使用它:
@Test
public void testSetAllChildPanelsVisible() {
JFrame frame = new JFrame();
JPanel panel1 = new JPanel();
frame.getContentPane().add(panel1);
JPanel panel2 = new JPanel();
panel1.add(panel2);
panel1.setVisible(false);
panel2.setVisible(false);
assertFalse(panel1.isVisible());
assertFalse(panel2.isVisible());
setAllChildPanelsVisible(frame.getContentPane());
assertTrue(panel1.isVisible());
assertTrue(panel2.isVisible());
}
答案 1 :(得分:1)
这是执行此操作的通用方法。它反复遍历容器层次结构中的所有组件,找到与特定组件类匹配的组件,并设置它们的可见属性:
static void setComponentVisibility(Container container,
Class<? extends Component> componentClass, boolean visible) {
for (Component c : container.getComponents()) {
if (componentClass.isAssignableFrom(c.getClass())) {
c.setVisible(visible);
} else if (c instanceof Container) {
setComponentVisibility((Container)c, componentClass, visible);
}
}
}
使用类似这样的东西:
setComponentVisibility(frame, JPanel.class, false);