首页 文章

如何使用外部对象的按钮对组件执行操作?

提问于
浏览
0

这个 Headers 很难说出来,但这里的解释如下:

我有一个菜单栏,我将其作为外部对象添加到我的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 ....但是后来我不知道该怎么做 .

EDIT:

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

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

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

希望这不会让我的内容在后面变得混乱,因为我的内容面板现在是静态的 .

2 回答

  • 2

    这很难回答 .

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

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

    请查看一些代码示例 .

    我把它放在答案的这一半 .

    intro .

  • 2

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

    如果可以的话,最好传递一个interace模型,将你的行为限制为只执行你真正想要的工作

相关问题