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