重写代码,以便在不改变其行为的情况下提高其可读性

时间:2017-04-14 22:52:00

标签: java swing

公共类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值。但是,编码不能以这种简单的方式工作。请帮我解决这个简单的代码并提高可读性。感谢。

2 个答案:

答案 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)

您可以定义单MyActionListenerimplements 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]));
    }
}