我正在尝试将JMenuBar的子类添加到用户界面,但由于某种原因它永远不会出现。我已经尝试过使用JFrame.setJMenubar()和JFrame.add(),我尝试在SwingUtilities.invokeLater()调用等中添加它...当它在使用JMenuBar本身而不是子类时它仍然有效,所以我怀疑它与此有关。
这是初始化应用程序窗口的代码:
public DramaSimWindow() {
initializeSelf();
initializeContainers();
this.setVisible(true);
}
private void initializeSelf() {
initializeContentPane();
this.setBounds(100, 100, 800, 500);
this.setJMenuBar(new DramaSimMenuBar());
this.setResizable(false);
}
这是JMenuBar的子类,它作为私有类位于主窗口类中:
private class DramaSimMenuBar extends JMenuBar {
private static final long serialVersionUID = 1L;
public DramaSimMenuBar() {
initializeSelf();
}
private void initializeSelf() {
menuBar = new JMenuBar();
initializeFileMenu();
initializeEditMenu();
}
private void initializeFileMenu() {
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Save"));
fileMenu.add(new JMenuItem("Save as"));
fileMenu.add(new JMenuItem("Exit"));
menuBar.add(fileMenu);
}
private void initializeEditMenu() {
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("Copy"));
editMenu.add(new JMenuItem("Cut"));
editMenu.add(new JMenuItem("Paste"));
menuBar.add(editMenu);
}
}
答案 0 :(得分:6)
您不应该首先扩展JMenuBar。只需创建并使用 JMenuBar而不是扩展它。顺便说一句,问题是你的JMenuBar子类不会向自己添加菜单,而是向它创建的另一个JMenuBar:
private void initializeSelf() {
menuBar = new JMenuBar();
...
menuBar.add(fileMenu);
应该是
private void initializeSelf() {
...
this.add(fileMenu);
答案 1 :(得分:2)
如果你的基类是从JMenuBar扩展的,为什么要创建一个JMenuBar,所以正确的代码如下:
private class DramaSimMenuBar extends JMenuBar {
private static final long serialVersionUID = 1L;
public DramaSimMenuBar() {
initializeSelf();
}
private void initializeSelf() {
initializeFileMenu();
initializeEditMenu();
}
private void initializeFileMenu() {
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Save"));
fileMenu.add(new JMenuItem("Save as"));
fileMenu.add(new JMenuItem("Exit"));
add(fileMenu);
}
private void initializeEditMenu() {
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("Copy"));
editMenu.add(new JMenuItem("Cut"));
editMenu.add(new JMenuItem("Paste"));
add(editMenu);
}
private static final long serialVersionUID = 1L;
public DramaSimMenuBar() {
initializeSelf();
}
private void initializeSelf() {
initializeFileMenu();
initializeEditMenu();
}
private void initializeFileMenu() {
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Save"));
fileMenu.add(new JMenuItem("Save as"));
fileMenu.add(new JMenuItem("Exit"));
add(fileMenu);
}
private void initializeEditMenu() {
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("Copy"));
editMenu.add(new JMenuItem("Cut"));
editMenu.add(new JMenuItem("Paste"));
add(editMenu);
}