有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为JFrame上的所有JPanel设置可见

如何为JFrame上的所有JPanel设置可见? 我知道我可以使用JFrame。杰帕内尔。设置每个面板可见,但我想为所有面板设置一个

这是非常有用的,因为我不知道巫婆面板是否可见。所以我想在动作后隐藏所有面板,并显示1或2个面板


共 (2) 个答案

  1. # 1 楼答案

    简单解决方案

    将所有面板存储为实例或列表

    通用解决方案

    迭代小部件树

    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());
    }
    
  2. # 2 楼答案

    这里有一个通用的方法可以做到这一点。它循环遍历容器层次结构中的所有组件,查找与特定组件类匹配的组件,并设置其可见属性:

    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);