使用方法作为事件侦听器而不是 class
Use method as event listener instead of class
我总是为按钮等创建一个事件监听器:
class MyClass implements extends JPanel implements ActionListener{
JButton btn1, btn2, btn3;
public Myclass(){
....
btn1 = new JButton("button 1");
btn1.addActionListener(this);
....
}
public void actionPerformed(ActionEvent e) {
Object action = e.getSource();
if(action = btn1){
functionForBTN1();
}
else if(action = btn2){
functionForBTN2();
}
else if(action = btn3){
functionForBTN3();
}
}
public void functionForBTN1(){...}
public void functionForBTN2(){...}
public void functionForBTN3(){...}
}
是否可以将事件直接定向到方法而不是 actionPerformed()
方法?类似于(伪代码):
class MyClass implements extends JPanel implements ActionListener{
JButton btn1, btn2, btn3;
public Myclass(){
....
btn1 = new JButton("button 1");
btn1.addActionListener(this.functionForBTN1());
....
}
public void functionForBTN1(){...}
public void functionForBTN2(){...}
public void functionForBTN3(){...}
}
您可以使用匿名 类:
btn1.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent e) {
// ....
}
});
但是,如果您想像在第二个代码段中那样添加它,您可以执行以下操作:
final ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
if (e.getSource() == btn1) {
//...
} else if (e.getSource() == btn2) {
//...
}
}
};
然后:
btn1.addActionListener(listener);
btn2.addActionListener(listener);
我个人更喜欢匿名 类,只要它们可读且不会太长。
如果您使用的是 Java 8,则可以使用 lambda 表达式完成此操作。
btn1.addActionListener(e -> this.functionForBTN1());
在 Java8 之前,您可以创建一个匿名的 ActionListener 来完成相同的任务。
btn1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
this.functionForBTN1();
}
});
正如 Maroun Maroun 所说,匿名 class 是个好主意。使用 java-8 您还可以使用 lamdba 使代码稍微好一点;
btn1.addActionListener(event -> functionForBTN1());
我总是为按钮等创建一个事件监听器:
class MyClass implements extends JPanel implements ActionListener{
JButton btn1, btn2, btn3;
public Myclass(){
....
btn1 = new JButton("button 1");
btn1.addActionListener(this);
....
}
public void actionPerformed(ActionEvent e) {
Object action = e.getSource();
if(action = btn1){
functionForBTN1();
}
else if(action = btn2){
functionForBTN2();
}
else if(action = btn3){
functionForBTN3();
}
}
public void functionForBTN1(){...}
public void functionForBTN2(){...}
public void functionForBTN3(){...}
}
是否可以将事件直接定向到方法而不是 actionPerformed()
方法?类似于(伪代码):
class MyClass implements extends JPanel implements ActionListener{
JButton btn1, btn2, btn3;
public Myclass(){
....
btn1 = new JButton("button 1");
btn1.addActionListener(this.functionForBTN1());
....
}
public void functionForBTN1(){...}
public void functionForBTN2(){...}
public void functionForBTN3(){...}
}
您可以使用匿名 类:
btn1.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent e) {
// ....
}
});
但是,如果您想像在第二个代码段中那样添加它,您可以执行以下操作:
final ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
if (e.getSource() == btn1) {
//...
} else if (e.getSource() == btn2) {
//...
}
}
};
然后:
btn1.addActionListener(listener);
btn2.addActionListener(listener);
我个人更喜欢匿名 类,只要它们可读且不会太长。
如果您使用的是 Java 8,则可以使用 lambda 表达式完成此操作。
btn1.addActionListener(e -> this.functionForBTN1());
在 Java8 之前,您可以创建一个匿名的 ActionListener 来完成相同的任务。
btn1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
this.functionForBTN1();
}
});
正如 Maroun Maroun 所说,匿名 class 是个好主意。使用 java-8 您还可以使用 lamdba 使代码稍微好一点;
btn1.addActionListener(event -> functionForBTN1());