-2

我现在正在实现一个托盘游戏,其中我使用一些 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);
            }
            ......
    }

请问我怎样才能减少这种代码?:/

谢谢 :)

4

3 回答 3

2

创建 JButton 时,将它们放置在 2D、7x7 数组中。

然后在 listener 方法中,循环遍历数组来判断哪个JButton被点击了。您的循环索引将帮助您确定要传递给PosePion.

于 2013-05-08T19:31:33.440 回答
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);
    }
}
于 2013-05-08T20:02:53.923 回答
1

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

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

我还推荐一种数据结构和命令实现来减少无意识的重复。

于 2013-05-08T19:32:22.123 回答