1

ボタンをクリックしたときに何をする必要がありますか?彼はボタン内のテキストを教えてくれますか? このコードでは、ボタンをクリックすると、最後の "i" var 値が返されるためです...この場合、彼は私に "5" を与えます。

for(int i; i < 5; i++) {
      JButton button = new JButton();
      button.setText("" + i);
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ae) { 
           // TODO add your handling code here:
           System.out.print("\n Test: " + button.getText());

         } 
      });
      button.setSize(60,20);
      button.setLocation(100, 140);
      button.setVisible(true);
      this.add(button);
      this.revalidate();
      this.repaint();
  }
4

2 に答える 2

3

変化する:

System.out.print("\n Test: " + button.getText());

System.out.print("\n Test: " + ae.getActionCommand());
于 2013-09-15T16:38:50.640 に答える
2

元のコードを投稿していません。button投稿されたようにコンパイルされないので、クラスのフィールドだと思います。

投稿されたコードは、わずかな変更で機能します。

for (int i; i < 5; i++) {
    // Notice the "final"
    final JButton button = new JButton();
    ...

buttonフィールドは役に立たないので、アクション イベントから文字列を取得するという Hovercraft の適切なアドバイスに従っている場合でも、これを行う必要があります。

アクション イベントから文字列を取得すると、すべてのボタンに対して 1 つのリスナーを再利用することもできます。

ActionListener listener = new ActionListener() {
    public void actionPerformed(ActionEvent ae) { 
      System.out.print("\n Test: " + ae.getActionCommand());
    } 
};

for (int i; i < 5; i++) {
    final JButton button = new JButton();
    button.setText(Integer.toString(i));
    button.addActionListener(listener);
    // the rest as before
    ...
}
于 2013-09-15T16:54:50.543 に答える