2

私は自分の特定の基本的な問題に対する答えをウェブで探していましたが、見つけることができませんでした。私はプログラミングに不慣れであり、学校のためにこれをしなければなりません。私は6/49宝くじのインターフェースを作成しました。ここでは、6つのJButtonをクリックして、「ラッキー」な数字を作成する必要があります。インターフェイス.javaでは、次のようにボタンを作成しました。

JButton b;
        for (i = 1; i <= 49; i ++)
        {           
            String  s = String.valueOf(i);
            b = new JButton(s); 
            if (i % 2 == 0)            
                b.setForeground(new Color(3, 121, 184));
            else
                b.setForeground(new Color(228, 44, 44));            

         choixNumero.add(b);  

注:「choixNumero」はgridLayout(7 x 7)です

別の.javaで、JButton bへのactionListenerを作成していますが、それは機能していないようです。これが私がそれを書いた方法です:

intProjet.b.addActionListener(new EcouteurCombinaison()); // where "intProjet" is my interface.java

そしてここに私のEcouteurCombinaisonのコードがあります:

private int []  nums;
private int    nbRestant = 6;
private class EcouteurCombinaison implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        if (nbRestant > 0)
        {
            //nums[nbRestant] = indexOf(e)); //will have to find a way to get index of the button pressed
            nbRestant --;
            intProjet.valNbRestant.setText("" + nbRestant);
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Vous avez choisis vos 6 numéros\n Cliquer sur Soumettre pour valider", "Information", JOptionPane.INFORMATION_MESSAGE);   
        }    
    }
}

つまり、基本的には、ボタンが押されるたびに、JButtonのインデックスまたは値をベクターに追加しようとしています。次に、それを別の.javaに送信します

私は自分のコードに他のactionListenerを実装しましたが、それらは正常に機能します(JButton、RadioButton、JComboBox)。ボタンをクリックしても何も起こらない理由がわかりません。

すべてのコードを貼り付けずに、これをできるだけ明確にしようとしました。

編集: ActionListenerは最後のボタン(49)でのみ機能します。すべてのbボタンをリッスンさせるにはどうすればよいですか?

4

2 に答える 2

2

bそのループでの値を継続的に再割り当てしています。ループが完了すると、最後JButtonに作成されるループがループに割り当てられます。次に、ActionListenerをそのボタンにバインドしますが、他のボタンにはバインドしません。intProjet.b.addActionListener()の1回の呼び出しですべてのJButtonに追加することを期待した理由がわかりません。

于 2012-12-11T20:06:52.717 に答える
2

intProjet.bループ内で作成された最後のボタンを参照するため、結果が期待されます。代わりに、ここに示すように、各ボタンにリスナーの独自のインスタンスを与えることができます。

于 2012-12-11T20:07:34.453 に答える