公共类A2 {
public class B implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Fing");
}
}
public class C implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Fang");
}
}
public class D implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Foom");
}
}
public A2(){
JButton a = new JButton("Fing");
JButton b = new JButton("Fang");
JButton c = new JButton("Foom");
a.addActionListener(new B());
b.addActionListener(new C());
c.addActionListener(new D());
}
public static void main(String[] args) {
A2 a2 = new A2();
}
我遇到的问题很简单,但很复杂。我希望它在不修饰其功能的情况下缩短代码。例如,代码显示给许多actionlisteners和actionperformed,我试图让它一个类拉出System.out.println();并在其上放入String值。但是,编码不能以这种简单的方式工作。请帮我解决这个简单的代码并提高可读性。感谢。
答案 0 :(得分:2)
我们无法知道你可以做些什么,我个人是自我记录代码的粉丝,所以有时候,在尝试优化解决方案时你需要小心。
我的第一个想法可能是从Action's API开始,它允许你设计一个独立的工作单元
public class CommonAction extends AbstractAction {
public CommonAction(String name) {
putValue(NAME, name);
putValue(SHORT_DESCRIPTION, "This is a tool tip for " + name);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(getValue(NAME));
}
}
如果需要,您可以进一步扩展以提供更多自定义,覆盖actionPerformed
方法,但是,这取决于您。
然后你只需要申请按钮......
public class A2 {
public A2() {
JButton a = new JButton(new CommonAction("Fing"));
JButton b = new JButton(new CommonAction("Fang"));
JButton c = new JButton(new CommonAction("Foom"));
}
}
或者您的菜单或密钥绑定Action
是一个相当灵活的API,由许多其他组件支持
答案 1 :(得分:1)
您可以定义单MyActionListener
个implements ActionListener
,如下所示:
public class MyActionListener implements ActionListener {
private String input;
public MyActionListener(String input) {
this.input = input;
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(input);
}
}
public A2(){
String[] inputs = {"Fing","Fang","Foom"};//Array of JButton inputs
for(int i=0;i<inputs.length;i++) {
JButton jButton = new JButton(inputs[i]);//create JButton instance
jButton.addActionListener(new MyActionListener(inputs[i]));
}
}