Java 如何将JPanel添加到Netbeans中的JFrame?

Java 如何将JPanel添加到Netbeans中的JFrame?,java,swing,Java,Swing,我有一个带有JPanel属性的主Jframe: public class Principal extends javax.swing.JFrame { private javax.swing.JPanel jPanel1; private javax.swing.JButton jButton3; public Principal() { initComponents(); } private void jButton3ActionPerformed(j

我有一个带有
JPanel
属性的主
Jframe

public class Principal extends javax.swing.JFrame
{
  private javax.swing.JPanel jPanel1;
  private javax.swing.JButton jButton3;   

  public Principal()
  {
    initComponents();
  }

  private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
  {
    addPerson p = new addPerson();
    jPanel1.add(p);
    p.setVisible(true);
    jPanel1.setVisible(true); 
  }
}

当我按下
jbutton3aactionperformed
时,我想知道如何在此
JFrame
中显示位于同一个包(但不同文件)中的另一个面板?

一个可能的解决方案可以如下所示:

我创建了PricipaPanel作为自己的类扩展JPanel,我也使用AddPerson面板完成了这项工作。然后,您可以向大型机中添加一个JMenuBar,并在其中显示jmenubitems,以提供切换面板的可能性

MainFrame类,这里的revalidateView(JPanel面板)方法从JFrame中删除所有组件,并添加新组件并调用revalidate

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

/**
 *
 * @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
 * @version 1.0
 */
public class MainFrame extends javax.swing.JFrame implements ActionListener {

    private JMenuItem addPersonItem;
    private JMenuItem showPrincipalItem;  

    private JPanel jPanel1;

    public MainFrame() {

        this.setSize(new Dimension(1024, 768));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setJMenuBar(initMenuBar());
        this.add(initComponents());
    }

    private JPanel initComponents() {
        this.jPanel1 = new JPanel(new BorderLayout(10, 10));
        this.jPanel1.add(new PricipalPanel(), BorderLayout.CENTER);

        return jPanel1;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(addPersonItem)) {
            revalidateView(new AddPerson());
        }

        if(e.getSource().equals(showPrincipalItem)) {
            revalidateView(new PricipalPanel());
        }
    }

    private void revalidateView(final JPanel jPanel) {
        this.getContentPane().removeAll();
        this.setJMenuBar(initMenuBar());
        this.add(jPanel);
        this.revalidate();
    }

    private JMenuBar initMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu changeJPanel = new JMenu("Change Panels");

        addPersonItem = new JMenuItem("add PersonPanel");
        addPersonItem.addActionListener(this);
        showPrincipalItem = new JMenuItem("show Pricipal Panel");
        showPrincipalItem.addActionListener(this);
        changeJPanel.add(addPersonItem);
        changeJPanel.add(showPrincipalItem);

        menuBar.add(changeJPanel);
        return menuBar;
    }
}
首席顾问

import javax.swing.JLabel;
import javax.swing.JPanel;

class PricipalPanel extends JPanel {

    public PricipalPanel() {

        this.add(new JLabel("Hej there, i am the Pricipal Panel, i have to display this Text because the initComponents Method wasn't posted on StackOverflow!"));
    }

}
开始吧

import javax.swing.SwingUtilities;

public class AddJPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> { 
            MainFrame p = new MainFrame();
        });
    }

}
试试看,如果你有问题,请提问


Patrick

尝试在jPanel1或帧上调用revalidate
import javax.swing.SwingUtilities;

public class AddJPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> { 
            MainFrame p = new MainFrame();
        });
    }

}