用于实现动作侦听器的干代码(JAVA)

时间:2013-05-08 19:28:21

标签: java swing jbutton actionlistener reduce

我现在正在实施托盘游戏,其中我使用一些JButton来代表托盘。但托盘制作7x7,所以要实现动作监听器,它不是那么有趣。我现在有这样的代码:

public void actionPerformed(ActionEvent ae) 
    {
        if (ae.getSource() == Bouton11)
            {
                this.PosePion(1, 1, Bouton11);
            }
            else if (ae.getSource() == Bouton21)
            {
                this.PosePion(2, 1, Bouton21);
            }
            else if (ae.getSource() == Bouton31)
            {
                this.PosePion(3, 1, Bouton31);
            }
            ......
    }

我怎样才能减少这类代码? :/

谢谢:)

3 个答案:

答案 0 :(得分:2)

创建JButtons时,将它们放在2D,7x7阵列中。

然后在侦听器方法中,遍历数组以确定单击了哪个JButton。循环索引将帮助您确定要传递给PosePion的内容。

答案 1 :(得分:2)

创建自己的侦听器类型。您的类型应该实现ActionListener(以及actionPerformed方法),并使用三个参数构建:按钮和两个整数。您需要这三个参数的原因是,您可以将它们传递给PosePion方法(顺便说一句,该方法应该大写posePion。)

例如:

class PoseActionListener implements ActionListener {

    private JButton button;
    private int a, b;

    public PoseActionListener(JButton btn, int a, int b) {
        this.button = btn;
        this.a = a;
        this.b = b;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        posePion(a, b, btn);
    }
}

然后:

button11.addActionListener(new PoseActionListener(button11, 1, 1);
button12.addActionListener(new PoseActionListener(button12, 1, 2);

或者,更好的是,一次创建所有按钮:

for (int i=1; i<=7; i++) {
    for (int j=1; j<=7; j++) {
        JButton btn = new JButton("Button " + i + ", " + j);
        // store the button in an array if you want
        btn.addActionListener(new PoseActionListener(btn, i, j);
    }
}

答案 2 :(得分:1)

我建议你学习Sun Java编码约定。你的代码难以阅读。

我会考虑为每个实例设置一个单独的ActionListener而不是一个实例。

我还建议使用数据结构和Command实现来减少无意识的重复。