首页 文章

Java - 使用Netbeans隐藏/显示外部jPanel?

提问于
浏览
0

我是使用java开发GUI的新手,我正在使用netbeans来帮助我设计各种jPanel . 现在我有一个带有jFrame的类,我将在左边放一个菜单,右边有一个jPanel,当有人在左边做出选择时,我想调用jPanel类并将它放在那个面板中在右边 . 我见过各种不同的例子,但我无法让它发挥作用 . 这是我的文件结构的工作原理

  • connector.java(创建与db的连接并调用jframe类)

  • jframe.java(左侧包含菜单,右侧包含空jpanel)

  • panel1.java(我在netbeans中设计的面板类)panel2.java

  • panel3.java

现在,当有人在我的菜单中选择panel1时,如何将panel1放入我的jframe中?

3 回答

  • 1

    您可能希望使用可以在视图(面板)之间切换的CardLayout . 您可以在How to Use CardLayout查看更多信息 . 您只需调用 cardLayout.show(...) ,即可显示所需的面板(可以这么说) .

    同样对于Netbean构建器工具,您可以看到How to use CardLayout with Netbeans GUI Builder .

    另见this post . 您可以将类面板拖放到设计视图中

  • 0

    您可以使用 CardLayout ,也可以使用一些setVisible()调用 . 我'm not sure if you'询问如何设置框架,但你可以用BoxLayout做到这一点:

    JFrame f = new JFrame();
    JPanel wholePanel = new JPanel();
    wholePanel.setLayout(new BoxLayout(wholePanel, BoxLayout.X_AXIS)); // panel with a vertical split, i.e. new panels get added as new "columns"
    wholePanel.add(menuPanel);
    
    JPanel potentialPanels = new JPanel(); // use this to act as a single panel on the right
    potentialPanels.add(panel1); // it'll contain both panel1 and panel3, but only show one at a time
    potentialPanels.add(panel3);
    panel3.setVisible(false); // panel 3 invisible by default
    
    showPanel1Button.addActionListener(new ActionListener(){ // activates upon selection
       @Override
       public void actionPerformed(ActionEvent e) { 
          panel1.setVisible(true); // show panel 1
          panel3.setVisible(false); // /hide panel 3
       }
    });
    
    showPanel3Button.addActionListener(new ActionListener(){
           @Override
           public void actionPerformed(ActionEvent e) { 
              panel1.setVisible(false); // do the reverse: hide panel 1, show panel 3
              panel3.setVisible(true);
           }
    });
    

    另一种方法是使用CardLayout作为 potentialPanels 面板 .

    根据您对上述帖子的评论,如果您担心有很多面板,那么您可以使用 ArrayList 来包含所有面板 . 然后,您可以将其中一个面板设置为可见,暂时将其从列表中删除,然后迭代列表的其余部分,将它们全部设置为"invisible",然后再将该可见面板添加到列表中 . 使用CardLayout会更有效率,你可以以相同的方式显示单个面板而其他面板是"hidden",但内置 show 功能,避免了 ArrayList 的混乱 .

  • 0

    完全同意上述内容 . 我非常成功地使用了CardLayout .

    但是不要忘记在您更改的任何组件上调用revalidate(无论您是否使用CardLayout) . 这告诉UI它需要更新到屏幕 .

相关问题