所以,我对用java编程接口有点陌生。我有一个JButton菜单,每个JButton都有一个与之相关的操作(所以我使用新的JButton(action)),但是一旦选择了一个按钮,我就想关闭菜单,所以我在每个执行此操作的JBbutton上都附加了一个ActionListener。
出于美观的原因,我希望ActionListener在JButton的操作之前进行,但我找不到一种不涉及添加新线程或创建新类的方法。。。有人有什么想法吗?此外,我使用的是Java 1.4,所以没有什么新奇的东西。
另一种可靠的方法,使用内部类-我知道你不想创建自己的类,但这让它非常简单。
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 */
}
});
...
EDIT:由于执行添加操作的订单上没有担保人,因此被视为不正确-请参阅注释
可以使用以下功能分配操作:
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);
代码是伪的/未经测试的,但这是我要尝试的第一件事。