实现动作监听器(JAVA)的干代码

实现动作监听器(JAVA)的干代码,java,swing,jbutton,actionlistener,reduce,Java,Swing,Jbutton,Actionlistener,Reduce,我现在正在实现一个托盘游戏,在这个游戏中,我使用一些JButton来表示托盘。但是托盘是7x7的,所以要实现action listener就没那么有趣了。我现在有一个这样的代码: public void actionPerformed(ActionEvent ae) { if (ae.getSource() == Bouton11) { this.PosePion(1, 1, Bouton11);

我现在正在实现一个托盘游戏,在这个游戏中,我使用一些JButton来表示托盘。但是托盘是7x7的,所以要实现action listener就没那么有趣了。我现在有一个这样的代码:

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);
            }
            ......
    }
我怎样才能减少这种代码/


谢谢:)

在创建JButton时,将其放置在2D、7x7阵列中


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

的内容。我建议您学习Sun Java编码惯例。你的代码很难读

<>我会考虑每个实例都有一个单独的动作监听器,而不是所有的。p>
我还建议使用数据结构和命令实现来减少无意识的重复。

创建您自己的侦听器类型。您的类型应该实现
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);
    }
}
然后:

或者,最好一次创建所有按钮:

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);
    }
}

用于(int i=1;我理解你的意思,我知道如何将它们放入数组,但是你如何确定哪个JButton被循环单击,以及如何将其传递给PosePion?例如,我们在课堂上没有学习如何做到这一点,只知道如何实现一个动作侦听器……这就是为什么我在实现它时遇到了一些问题。你需要学习我上课,动动脑筋,不要做简单的复制粘贴。谢谢伙计,我会试试这个=)
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);
    }
}