2

我目前正在编写一个带有 Swing 的桌面应用程序,其中包含MainFrame几个InternalFrames将运行的。我想InternalFrames为每个类编写单独的类,以避免拥有一个巨大的MainFrame类。

现在我的问题是我想将一个添加ActionListener到 aMenuItem中的 aPopupMenu中,MenuInternalFrame从而InternalFrameMainFrame. 出现MenuInternalFrame,但是当我单击 MenuItem 时没有任何反应。当我将代码放在ActionListenerInternalFrame 之外时出现。

问题一定出在ActionListener. InternalFrame这可能是我使用本地类和从mouseClicked-Method中访问的最终实例的解决方法吗?

以下是来自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在 a上使用,而是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 回答