-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

独自のリスナー タイプを作成します。あなたのタイプは実装する必要がActionListenerあり(したがってactionPerformedメソッドも)、ボタンと2つの整数の3つのパラメーターで構築されます。これら 3 つのパラメーターが必要な理由は、それらを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 に答える
2

JButton は、作成時に 2D の 7x7 配列に配置します。

次に、リスナー メソッドで配列をループして、JButtonクリックされたものを特定します。ループ インデックスは、 に何を渡すかを決定するのに役立ちますPosePion

于 2013-05-08T19:31:33.440 に答える
1

Sun Java コーディング規約を学ぶことをお勧めします。あなたのコードは読みにくいです。

すべてに対して 1 つではなく、インスタンスごとに個別の ActionListener を持つことを検討します。

また、無意味な繰り返しを減らすために、データ構造とコマンドの実装をお勧めします。

于 2013-05-08T19:32:22.123 に答える