我现在正在实施托盘游戏,其中我使用一些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);
}
......
}
我怎样才能减少这类代码? :/
谢谢:)
答案 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实现来减少无意识的重复。