0

所以,我对使用 java 编程接口有点陌生。我有一个 JButtons 菜单,其中每个 JButton 都有一个与之关联的操作(所以我使用 new JButton(action)),但是一旦选择了一个按钮,我想关闭菜单,所以我有一个 ActionListener 附加到每个 JButton这样做。

出于漂亮的原因,如果 ActionListener 在 JButton 的动作之前,我会喜欢它,但我找不到不涉及添加新线程或创建新类的方法......有人有什么想法吗?另外,我使用的是 Java 1.4,所以没有花哨的新东西。

4

2 回答 2

0

编辑:由于没有保证执行添加操作的顺序而被认为不正确 - 请参阅评论

可以使用函数分配操作:

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/AbstractButton.html#setAction%28javax.swing.Action%29

与其通过构造函数传递它,不如在之后分配它:

ActionListener closeMenu = ...;
Action myaction1 = ...;
JButton mybutton1 = new JButton();
mybutton1.addActionListener(closeMenu);
mybutton1.setAction(myaction1);

代码是伪/未经测试的,但这是我要尝试的第一件事。

于 2011-06-13T22:48:57.560 回答
0

另一种可靠的方法,使用内部类 - 我知道您不想创建自己的类,但这使它非常简单。

class MenuAction extends Action {
    public void actionPerformed() { /* close menu */ }
}

public void MyMenu() { // or where your menu construction code occurs
    ...
    JButton mybutton1 =
        new JButton(new MenuAction() {
                public void performAction() {
                    // close the menu first
                    super.actionPerformed();
                    // then perform the button's action
                    /* button1's behaviour */
                }
            });
    ...
于 2011-06-15T17:33:24.700 回答