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 に答える