使用 JMenuBar 是什么意思?我建议研究 OOP 和封装。YouTube 上有一个人,我认为他在涵盖此类内容以及几种设计模式方面做得非常出色,我相信频道名称是 DerekBanas。如果你用谷歌搜索,他会出现。
对您的问题的快速回答是,您将想要将某些内容传递给 JPanel 类的构造函数,或者将 main 方法放在 JPanel 类中,这是一种方法的快速示例......
JMenuItem 是 - 添加新记录,在第一个选项卡中,当我选择这个 JMenuItem 时,他会打开一个框架,其中是 JLabel 和 JTextField。然后是第二个选项卡,我单击同一个 JMenuItem,它会召唤新的 JFrame,它有自己的 JLabel 和 JTextField。
public class TestFrame extends JFrame {
private ActionManager actionManager
private JMenuBar mb;
private JMenu file;
private JMenuItem openDialog1;
private JMenuItem openDialog2;
public TestFrame() {
this.actionManager = new ActionManager();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPanel(panel);
setJMenuBar(createMenuBar());
pack();
}
private JMenuBar createMenuBar() {
mb = new JMenuBar();
file = new JMenu("File");
openDialog2 = new JMenuItem("Open Dialog 2");
openDialog1 = new JMenuItem("Open Dialog 1");
openDialog2.addActionListener(actionManager.openDialog2Action);
openDialog1.addActionListener(actionManager.openDialog1Action);
//here i would add conditional code that added the correct
//menus to the menubar and menuitems to the correct menus and call
//this method from a `ChangeListener` that listens for tab changes so
//it recreates a new menu with the correct components for the selected
//tab but i added them to the same menu to demonstrate using specific actions
//for each menu item, it doesn't matter which menu they're attached to their
//action wont be called unless that JMenuItem is clicked.
//this method can be used for any type of button as well, commonly with
//toolbars, so you can reuse actions like copy, paste, new, open, save, etc
file.add(openDialog1);
file.add(openDialog1);
mb.add(file);
return mb;
}
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
和面板类...
public class ActionManager {
public ActionManager() {
}
Action openDialog1Action = new AbstractAction("Open Dialog 1") {
JOptionPane.showMessageDialog(null, "Dialog 1");
}
Action openDialog2Action = new AbstractAction("Open Dialog 2") {
JOptionPane.showMessageDialog(null, "Dialog 2");
}
}
这段代码所做的只是使用公共方法访问类中的私有字段(封装),并将 TestFrame 对象传递给 TestPanel 构造函数,因此我们可以使用 TestPanel 类的 TestFrame 中的 getter 方法。我还将 ActionListener 添加为 TestPanel 类的一部分,因为这是在面板类中使用菜单栏组件的另一种方式。你能具体告诉我你想要完成什么,或者可能发布你当前代码的一小部分吗?这是执行您所要求的几种方法之一,但它可能不是首选方式,具体取决于您首先要从面板访问它们的原因,您的问题越具体,我能得到的帮助就越多。祝你好运。