gpt4 book ai didi

java - CardLayout 使用 JMenu 发送错误信息

转载 作者:行者123 更新时间:2023-12-03 23:14:16 25 4
gpt4 key购买 nike

大家好,我想创建一个简单的程序,我可以在其中使用 menuItems 控制每个 JPanel。例如,如果我选择 File->New,其中 New 是 JmenuItem,它将显示一个名为 newPanel 的 JPanel。此外,如果我选择“编辑”->“编辑”,它将显示名为 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

谁能帮我解决这个问题?提前致谢!

最佳答案

  • 必须为 CardLayout 使用正确的方法 - public void show(Container parent, String name)

  • 然后使用 cardView.show(cardPanel, "New"); (insted of cardView.show(newPanel, "New");)

  • newPanel as Container 的其余部分将保留并仅更改第二个。 String形式的参数

关于java - CardLayout 使用 JMenu 发送错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com