1

要するに、一連の を配列に蓄積し、その配列に対して 1 つのクラスをJButton作成したいと考えています。ActionListener

電卓を作成しようとしていますが、「6」などの番号付きのボタンはすべてJButton配列になっています。これは、セット番号を一時的な int に入力してもらいたいためです。作成した方が簡単です。他にも 40 個のボタンがあり、同じプリンシパルを別の配列に適用したいので、これらをActionListenerボタンのデータがあるいくつかのメソッドに配置する方がはるかに高速で簡単です。そのメソッドに実装されています。これは私が持っているコードです:

private JButton num0, num1, num2, num3, num4, num5, num6, num7, num8, num9;
private JButton numArray[] = {num0, num1, num2, num3, num4, num5, num6, num7, num8, num9};

        public GUI(){
          numArray.AddActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent event){

             }
       });
  }
4

3 に答える 3

10

Newb Monad の提案を検討できます。ただし、次の例のように、すべてのボタンに同じリスナーを使用できます。

public static void main(String[] args) {

    ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() instanceof JButton) {
                String text = ((JButton) e.getSource()).getText();
                JOptionPane.showMessageDialog(null, text);
            }
        }
    };

    JPanel panel = new JPanel(new GridLayout(4,3));

    JButton[] array = new JButton[10];
    for (int i = 0; i < array.length; i++) {
        array[i] = new JButton(String.valueOf(i));
        array[i].addActionListener(listener);
        panel.add(array[i]);
    }

    JOptionPane.showMessageDialog(null, panel);

}

ダイアログ

イベント

于 2013-07-12T21:20:11.527 に答える
2

あなたは正しい考えを持っています。ただし、配列オブジェクトにはメソッドがありませんaddActionListener()。それぞれにアクション リスナーを個別に追加する必要がありますJButton。すべてのボタンに同じリスナーを使用できますが、actionPerformed()メソッド内でクリックされたボタンを特定する必要があります。IMO、よりクリーンな解決策は、各 JButton に個別のリスナーを割り当てることです。これにより、各 ActionListener は、イベントのソースを確認せずに押された番号を知ることができます。たとえば、コンストラクターへの唯一の引数としてNumberButtonListenerを受け取るクラスを作成できます。その後、小さなループでintJButton と対応する を同時に作成できます。NumberButtonListener

于 2013-07-12T21:11:02.220 に答える