2

私は現在、MainFrameいくつかInternalFramesが実行されるで構成されるSwingを使用したデスクトップアプリケーションを作成しています。InternalFrames巨大なクラスが1つになるのを避けるために、それぞれに別々のクラスで記述したいと思いMainFrameます。

今私の問題は、で別のものを開くのでActionListenerMenuItemにを追加したいということです。が表示されますが、MenuItemをクリックしても何も起こりません。コードをInternalFrameの外に置くと、が表示されます。PopupMenuMenuInternalFrameInternalFrameMainFrameMenuInternalFrameActionListener

問題はに何かがあるに違いありませんActionListenerInternalFrame-メソッド内からにアクセスするためのローカルクラスと最後のインスタンスを使用した回避策mouseClickedでしょうか?

MainFrame-Constructorのコードの関連部分は次のとおりです。

class InternalFrames {
    TestInternalFrame test = new TestInternalFrame();
    JDesktopPane desktopPane = new JDesktopPane();
}

final InternalFrames internalFrames = new InternalFrames();

internalFrames.desktopPane.setBackground(Color.WHITE);

Menu menu = new Menu();
menu.getMntmTestMenuItem().addMouseListener( new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        internalFrames.desktopPane.add(internalFrames.test);
        internalFrames.test.setVisible(true);
    }
});
internalFrames.desktopPane.add(menu);
menu.setVisible(true);

問題となる可能性のあるアイデアはありますか?前もって感謝します。

4

1 に答える 1

2

で使用MouseAdapterしないでください。代わりJMenuItemに使用ActionListenerして追加してください。JMenuItem#addActionListener(...)

Menu menu = new Menu();
menu.getMntmTestMenuItem().addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            internalFrames.desktopPane.add(internalFrames.test);
            internalFrames.test.setVisible(true);
    }
});
于 2012-11-20T21:06:07.847 に答える