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



我是用java开发GUI的新手,我正在使用netbeans来帮助我设计各种jpanel。现在我有一个带有jFrame的类,我将在左侧放置一个菜单,在右侧放置一个jPanel,当有人在左侧进行选择时,我想调用jPanel类并将其放置在右侧的面板中。我见过各种不同的例子,但我不能让它工作。下面是我的文件结构

  • connector.java(创建数据库连接并调用jframe类)
  • jframe.java(左边包含一个菜单,右边包含一个空的jpanel)
  • panel1.java(面板类i设计在netbeans) panel2.java
  • panel3.java

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

您可能想要使用一个CardLayout,它将允许您在视图(面板)之间切换。你可以在如何使用CardLayout中看到更多。你只需调用cardLayout.show(...),你想要的面板就会出现(可以这么说)。

也为Netbean构建工具,你可以看到如何使用CardLayout与Netbeans GUI构建器。

也看这篇文章。您可以将类面板拖放到设计视图

您可以使用CardLayout,或者您可以使用一些setVisible()调用。我不确定你是否在问如何设置框架,但你可以用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);
       }
});

另一种选择是为potentialPanels面板使用CardLayout。

根据您对上述帖子的评论,如果您担心有很多面板,那么您可以使用ArrayList来包含所有面板。然后,您可以将其中一个面板设置为可见,暂时将其从列表中删除,并遍历列表的其余部分,将它们全部设置为"不可见",然后再次将该可见面板添加到列表中。这将是更有效的使用CardLayout,在那里你显示一个面板和其他是"隐藏",有效地以相同的方式,但与内置的show功能,避免ArrayList的混乱。

完全同意以上观点。我已经非常成功地使用了CardLayout。

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

相关内容

  • 没有找到相关文章

最新更新