0

我正在尝试将 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);
    }
}
4

2 回答 2

6

首先,您不应该扩展 JMenuBar。只需创建使用JMenuBar 而不是扩展它。顺便说一句,问题是您的 JMenuBar 子类不会向自身添加菜单,而是向它创建的另一个 JMenuBar 添加菜单:

private void initializeSelf() {
    menuBar = new JMenuBar();
    ...
    menuBar.add(fileMenu);

应该

private void initializeSelf() {
    ...
    this.add(fileMenu);
于 2012-11-28T22:20:38.720 回答
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);
}

}

于 2012-11-28T22:21:54.873 回答