2016-05-06 19 views
0

私はボタンをクリックした回数を私に与えるラベルを持つプログラムを構築しようとしています。しかし、その数はプログラムの他の場所でも必要です。それで、私は変数を2回目に適用する方法を知りたいのですが?外部のボタンフレーズ内で変数を使用する方法は?

jb.addActionListener(new ActionListener() 
      { 



       @Override 
       public void actionPerformed(ActionEvent e) { 
         // TODO Auto-generated method stub\ 
         number = 0; 
         number++; 
         ....... 
        } 

      }); 
    ....... 
    //String s = "good" + number; 
    //jf.setText(s); 
    // How to have the variable "number" be still avaliable here? 

    }// end of some method... 

public static void main(String[] args) { 
    button2 t = new button2(); 
} 

}

+0

ここで 'number'がどこに定義されているかを見るにはもっと多くのコードが必要ですが、' number'がそこにあると思います。問題は、ボタンをクリックするたびに 'number'を0にリセットしてから、それを1だけインクリメントすることです。また、' actionPerformed'メソッド内で 'jf'テキストをリセットしていません。 –

+0

jfテキストをリセットするには? –

+0

あなたはソース 'String s =" good "+ number;と' jf.setText(s); 'を持っていますが、それらは' actionListener'の外にあります。私は 'number = 0;'をコメントアウトし、それら2つの前のステートメントを 'actionListener'メソッドに移動することをお勧めします。 –

答えて

0

プライベートフィールドとしてnumberを宣言し、ボタンがクリックされたときにnumberの価値を高めます。あなたのコードは、ボタンがクリックされるたびに0(ゼロ)にnumberの値をリセットしてから宣言1.

private int number; 

jb.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
    number++; 
    } 
}; 

public static void main(String[] args) { 
    button2 t = new button2(); 
} 
+0

注:静的でない変数は、actionPerformedメソッド内ではアクセスできません。 –

+0

注:静的でない変数は、アプリケーションがオブジェクト指向であるため、actionPerformed-method内でアクセスできます。 @jaolstadは 'void main'の中にbutton2()オブジェクトを作成します。このオブジェクトはprivateクラス変数として' number'を持つ 'JFrame'を拡張しています。彼のアプリケーションがbutton2()オブジェクトを作成せず、彼のソースのすべてが 'void main'の内部にあったとすればあなたのコメントは正しいでしょう。 –

0

に等しい常にnumberが得られ、それに1を追加しますあなたのクラスとしてnumber /静的変数であれば、それにアクセスできます。

は、私はあなたのアプリケーションの問題は、あなたのJFrameの初期化時に番号にアクセスしたいということですが、あなたの代わりにあなたのactionListener方法でこれを行うべきであると考えてい

class SomeName{ 
private static int number = 0; 
...... 

jb.addActionListener(new ActionListener() 
      { 



       @Override 
       public void actionPerformed(ActionEvent e) { 
         // TODO Auto-generated method stub\ 
         number = 0; 
         number++; // here you can access number without any issue. 
         ....... 
        } 

      }); 

....... 
    String s = "good" + number; // here you can access number without any issue. 
    jf.setText(s); 

    }// end of some method... 


} 
0

、同様に参照してください。初期化は一度だけ実行する必要があります。ボタンをクリックすると、再実行されません。

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class button2 extends JFrame { 

    int num = 0; 
    JButton b; 
    JTextField jtf; 

    public button2() 
    { 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     b = new JButton("Clickme"); 
     jtf = new JTextField(""); 
     b.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       num++; 
       jtf.setText("good " + num); 
       System.out.println("This prints every time I click the button"); 
      } 
     }); 


     System.out.println("This only prints once"); 

     //String s = "good" + number; 
     //jf.setText(s); <--- Moved into the actionListener 
     // How to have the variable "number" be still available here? 

     this.setLayout(new GridLayout(0,1)); 
     this.add(jtf); 
     this.add(b); 
     this.pack(); 
    } 
    public static void main(String...banana) { new button2(); } 
} 
関連する問題