1

20 個のループが生成されJToggleButtonsており、それらのうちアクティブな数をカウントする必要があります。

private void generarBotones(){    
    JToggleButton b;
    this.panelCuerpo.setLayout(new GridLayout(4,5));        
    for(int i = 1; i<=20; i++){
        b = new JToggleButton();
        b.setText(String.valueOf(i));
        this.panelCuerpo.add(b);
        b.addActionListener(new ActionListener() {
            int clicks = 0;
            @Override
            public void actionPerformed(ActionEvent ae2){
                clicks = clicks + 1;
                System.out.println(clicks);
            }                
            public void setCantidadBoletas(int clicks){
                cantidadBoletas = clicks;
            }
        });
    }   
}

ここでの問題は、選択された回数をカウントするのではなく、それぞれがクリックされた回数をカウントすることです。

PS。使用しようとしまし(b.isSelected())たが、アクセスするb必要があるため、解決策ではありませんでした。final

4

4 に答える 4

2

JToggleButtonループ内で宣言すると、次のようになりfinalます。

for (int i = 1; i<=20; i++) {
    JToggleButton b = new JToggleButton();

次に、次を使用できますb.isSelected

    b.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (b.isSelected())
                clicks++;
            else
                clicks--;
        }
    });
}

clicksクラス変数でなければなりません。

于 2015-05-30T16:04:54.173 に答える
1

これを行うには多くの方法があり、最適な方法はコードの残りの部分によって異なります。私はそれをあなたのものに近づけようとしました。

finalループ内でボタンを宣言するだけで、選択されたボタンの数のグローバル カウントを保持できます。これは で変更されActionListenerます。

public class ButtonsCount extends JFrame {

    int clicks = 0;

    ButtonsCount() {

        JLabel label = new JLabel("0");
        JPanel buttonsPanel = new JPanel(new GridLayout(4,5));

        for(int i = 1; i <= 20; i++) {
            final JToggleButton b = new JToggleButton();
            b.setText(String.valueOf(i));
            buttonsPanel.add(b);
            b.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae2){
                    if (b.isSelected())
                        label.setText(String.valueOf(++clicks));
                    else
                        label.setText(String.valueOf(--clicks));
                }
            });
        }

        add(buttonsPanel);
        add(label, BorderLayout.PAGE_END);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {

        new ButtonsCount();
    }
}
于 2015-05-30T16:01:54.220 に答える
1

提案:

  • フィールドを作成し、JToggleButton[] toggleButtons = new JToggleButton[20]
  • または、必要に応じて ArrayList を使用します
  • for ループで JToggleButton を作成し、適切な配列項目に割り当てます。
  • ActionListener では、JToggleButton 項目がいくつ選択されているかを数えながら、配列を単純に反復処理します。
  • あなたは終わった。
于 2015-05-30T15:54:19.097 に答える