我目前正在学习java.swing和事件处理,我只用一个按钮开始简单操作,它更改了标签的文本,仅此而已。我这样做的方法是创建一个ActionListener并将其添加到按钮组件中,然后使用ActionPerformed方法更改标签的文本。我现在想知道更大的程序。您是否必须为用户可以与之交互的每个 组件创建一个新的ActionListener?必须有更好的方法来做到这一点,这是什么?
答案 0 :(得分:1)
或者您为每个侦听器创建一次,但它们对lambdas表达式可能非常简洁。
或者您保留按钮的引用,并使用if / else语句与action.getSource进行比较,例如:
Button x, y; //initialized somewhere
ActionListener l = new ActionListener() {
public void onActionPerformed(ActionEvent evt) {
if(evt.getSource() == x) {
//Do action for x
} else if (evt.getSource() == y) {
//Do action for y
}
}
x.addActionListener(l);
y.addActionListener(l);
答案 1 :(得分:0)
由于两个组件的功能完全相同是非常不寻常的,因此很可能每个组件都需要一个自己的ActionListener。
如果出于某种原因,两个组件执行相同的操作,那么我想到的最简单的方法就是将代码外包给一个方法,然后从ActionListener中调用该方法
答案 2 :(得分:0)
制作一个专门的类来执行常见的操作,可以通过将参数传递给构造函数来进行配置
利用Actions API并创建小的可重用操作。
这类似于第一点,但是提供了更多可配置的工作单元,可以轻松地应用于菜单项,按钮和键绑定
ActionEvent
... ActionEvent
包含许多使用属性,actionCommand
可能是较常见的一种(至少在匿名类出现之前)。
这使您可以将事件的源与应执行的操作分离开来,从而可以在多个对象上重复使用ActionListener
(或同一个实例)。
话虽这么说,Action
API已经或多或少地使其具有冗余性
目的是将重点放在核心操作上,并设计可重用和/或可配置的类,这些类可以很容易地提取出来,或者可以帮助减少通用代码的整体重复和重复。
答案 3 :(得分:-1)
我认为无法在同一个动作侦听器中处理多个按钮。 但是每次您单击按钮时,都可以在同一actionListener中处理整个文本框。 此外,在同一个actionListener中处理多个按钮听起来并不简单