实现动作监听器(JAVA)的干代码
我现在正在实现一个托盘游戏,在这个游戏中,我使用一些JButton来表示托盘。但是托盘是7x7的,所以要实现action listener就没那么有趣了。我现在有一个这样的代码:实现动作监听器(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);
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);
}
}