大家好,我想创建一个简单的程序,在其中我可以使用 menuItems 控制每个 JPanel。例如,如果我选择 File->New,其中 New 是 JmenuItem,它将显示一个名为 newPanel 的 JPanel。此外,如果我选择 Edit->Edit,它将显示名为 editPanel 的 JPanel 以及添加到其中的对象。到目前为止,这就是我所构建的:
public class CardLayoutwithMenuBar extends JFrame implements ActionListener {
private JMenuBar menu;
private JMenu fileMenu;
private JMenu editMenu;
private JMenu exitMenu;
private JMenuItem openItem;
private JMenuItem newItem;
private JMenuItem editItem;
private JMenuItem exitItem;
private JPanel newPanel;
private JPanel openPanel;
private JPanel editPanel;
private JPanel exitPanel;
static private CardLayout cardView;
static private JPanel cardPanel;
public CardLayoutwithMenuBar(){
this.setVisible(true);
this.setTitle("Controlling Different Panel Using CardLayout");
this.setSize(400, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create Menu bar and add to Frame
menu = new JMenuBar();
this.setJMenuBar(menu);
fileMenu = new JMenu("File");
editMenu = new JMenu("Edit");
exitMenu = new JMenu("Exit");
menu.add(fileMenu);
menu.add(editMenu);
menu.add(exitMenu);
newItem = new JMenuItem("New File");
openItem = new JMenuItem("File Open");
editItem = new JMenuItem("Edit Entry");
exitItem = new JMenuItem("Exit");
fileMenu.add(newItem);
fileMenu.add(openItem);
editMenu.add(editItem);
exitMenu.add(exitItem);
//Declare object cardView and cardPanel and set layout of cardPanel to CardLayout
cardView = new CardLayout();
cardPanel = new JPanel();
cardPanel.setLayout(cardView);
//Create sub-panels that would correspond to each function in the menu item ex. newItem, openItem etc...
newPanel = new JPanel();
openPanel = new JPanel();
editPanel = new JPanel();
exitPanel = new JPanel();
//add the sub-panels to the main cardpanel
cardPanel.add("New", newPanel);
cardPanel.add("Open", openPanel);
cardPanel.add("Edit",editPanel);
cardPanel.add("Exit",exitPanel);
newItem.addActionListener(this);
openItem.addActionListener(this);
editItem.addActionListener(this);
exitItem.addActionListener(this);
this.getContentPane().add(cardPanel, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt){
String menuItemAction = evt.getActionCommand();
if (menuItemAction.equals("New File")){
cardView.show(newPanel, "New");
}
else if (menuItemAction.equals("File Open")){
cardView.show(openPanel, "Open");
}
else if (menuItemAction.equals("Edit Entry")){
cardView.show(editPanel, "Edit");
}
else if (menuItemAction.equals("Exit")){
cardView.show(exitPanel, "Exit");
}
else{
System.out.println("Opppsss you pressed something else");
}
}
}
当我尝试运行这个程序时,我总是得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
at java.awt.CardLayout.checkLayout(CardLayout.java:404)
at java.awt.CardLayout.show(CardLayout.java:526)
at com.JMenuSample.CardLayoutwithMenuBar.actionPerformed(CardLayoutwithMenuBar.java:132)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
.... and the list goes on
谁能帮我解决这个问题?提前致谢!