0

很难说出这个的标题,但这里是解释:

我有一个菜单栏,我要从MenuBar.java 将JMenuBar 扩展为扩展JFrame 的主程序文件APP.java 作为外部对象添加。

MenuBar 和一个 JPanel(在我的主程序文件 APP.java 中)被添加到 JFrame 中。如何使 MenuBar 中的按钮在 JPanel 上执行操作。

这是我的 JMenuItem 对象现在在 MenuBar.java 中的样子:

    item = new JMenuItem("New);
    item.setMnemonic(KeyEvent.VK_N);
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
            ActionEvent.ALT_MASK));
    item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            JLabel block = new JLabel();
            block.setPreferredSize(new Dimension(120, 160));

            //***This is where I run into a problem... I want to add this JLabel to my JPanel in
            // the main file, and I also want to revalidate/repaint the JPanel to take show
            // the new JPanels as they're added.....
        }
    });
    file.add(item);

我不确定我是否需要扩展我的 APP 来实现 ActionListener.... 但是我不确定之后该怎么做。

编辑:

好吧,我能够通过将我的内容面板设为公开和静态来执行预期的操作,从而使其可用而无需实例化 APP 对象。然后我能够在 ActionListeners 中将这段代码实现到我的 actionPerormed 方法中:

            APP.content.add(new Thumb());
            APP.content.validate();

Thumb() 方法创建一个新的 JLabel;

希望以后不会弄乱我的东西,因为我的内容面板现在是静态的。

4

2 回答 2

2

这取决于您要执行的操作,但整体解决方案是相同的。您需要将要使用的对象的对象的引用传递给菜单类。

如果可以,最好传递一个交互模型,将您的操作限制为仅执行您真正希望他们执行的工作

于 2013-05-31T11:07:26.410 回答
2

这很难回答。

我会setAction(Action)(间接地)使用。可以将 Action 作为 AbstractAction 的子项,Action 可以保存其文本、图标、助记键等。

一种典型的用法是提供 a 的 JTextPane,Action[] getActios()这些操作可能会添加到菜单栏或 JToolBar。

请查看一些代码示例。

我把它留在这个答案的一半。

介绍。_

于 2013-05-31T11:12:35.363 回答