在父JPanel中显示添加的JPanel

如何在父JPanel看到添加的JPanel

我正在使用Netbeans来设计我的UI。

我有一个MainFrame.java ,它包含两个面板; 即headerPanelbodyPanel

headerPanel我放了三个按钮,让它为button1button2button3

我还创建了三个扩展JPanel独立文件,命名为panel1panel2panel3

然后我在构造函数的MainFrame.java中添加了bodypanel内的所有三个面板。

 bodyPanel.add(panel1); bodyPanel.add(panel2); bodyPanel.add(panel3); 

我希望单击相应的按钮时,只有相应的面板应出现在主机的bodypanel中,即如果我单击button1则应显示panel1

我已经在button1鼠标监听器方法中尝试了以下代码:

 bodyPanel.validate(); bodyPanel.getComponent(0).setVisible(true); 

但是panel1没有出现。 我这样做是因为面板中添加的组件被分配了索引。 所以首先我尝试获取组件然后使其可见。 它不起作用。

使用CardLayout ,如下所示。

游戏视图高分视图

您的要求完全由CARD LAYOUT填写, 请参阅此示例链接

以下示例链接

在此处输入图像描述

你的问题案例的完美代码是

 package panels.examples; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MainFrame extends JFrame implements ActionListener { JPanel headerPanel; JPanel bodyPanel; JPanel panel1,panel2,panel3; JButton button1,button2,button3; Container con; CardLayout clayout; public MainFrame() { //con=getContentPane(); clayout=new CardLayout(); headerPanel=new JPanel(); bodyPanel=new JPanel(clayout); button1=new JButton("button1"); button2=new JButton("button2"); button3=new JButton("button3"); //add three buttons to headerPanel headerPanel.add(button1); headerPanel.add(button2); headerPanel.add(button3); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); panel1=new JPanel(); panel1.add(new JLabel("Panel1")); panel1.setBackground(Color.pink); panel2=new JPanel(); panel2.add(new JLabel("Panel2")); panel2.setBackground(Color.gray); panel3=new JPanel(); panel3.add(new JLabel("Panel3")); //add above three panels to bodyPanel bodyPanel.add(panel1,"one"); bodyPanel.add(panel2,"two"); bodyPanel.add(panel3,"three"); setLayout(new BorderLayout()); setSize(600,450); add(headerPanel,BorderLayout.NORTH); add(bodyPanel,BorderLayout.CENTER); // headerPanel.setBounds(0,0,600,100); bodyPanel.setBounds(0,100, 600, 500); setVisible(true); } public static void main(String args[]) { new MainFrame(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { clayout.show(bodyPanel, "one"); } else if(e.getSource()==button2) { clayout.show(bodyPanel, "two"); } else if(e.getSource()==button3) { clayout.show(bodyPanel, "three"); } } } 

出局

出局

使用CardLayout。 下面是我写的助手课程。 希望能帮助到你。

 import java.awt.CardLayout; import javax.swing.JPanel; /** * * @author Dchan(Dulitha Wijewantha) * * This class is used to switch Cards in a CardLayout * * @version $Revision: 1.0 $ */ public class CardLayoutHelper { private JPanel panel; private CardLayout layout; /** * * @param panel JPanel */ public CardLayoutHelper(JPanel panel) { this.panel = panel; this.layout = (CardLayout) this.panel.getLayout(); } public CardLayoutHelper(JPanel panel, JPanel... panels){ this(panel); for (int i = 0; i < panels.length; i++) { JPanel jPanel = panels[i]; panel.add(jPanel.getName(), jPanel); } } /** * * @param currentPanel * - The panel that will be switched into the view */ public void switchPanel(JPanel currentPanel) { panel.removeAll(); panel.add(currentPanel, currentPanel.getName()); layout.show(panel, currentPanel.getName()); panel.revalidate(); panel.repaint(); } public void switchPanel(String name){ layout.show(panel, name); panel.revalidate(); panel.repaint(); } }