2016-04-05 6 views
0

コードを続行する前に、TextFieldに入力を待ちそれ以外の場合、変数は初期化されないため、コードはコンパイルされません。私のコードは、次のように見える、私は<code>TextField</code>を持っているグラフィカル・ユーザー・インターフェースを持っている

TextFieldがプログラムの最初に空であるため、getText()は値を取得しません。そのため、ポートは「0」のままです。

コードが続行される前に入力を待つ方法はありますか?解決策が見つかりました

+1

あなたはまた、モーダルダイアログ( 'JOptionPane')を呼び出すなどテキストフィールドの変更や、ボタンのクリックで動作し、リスナーにコードを置くことができます。 – Thomas

答えて

0

が、これは私がそれを解決する方法である:

私は私のActionListenerの外でグローバル変数を作成しました:

'の値' という名前
public String value = ""; 
public void createInput() { 
    buttonInput.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      value = textfieldInput.getText(); 

     } 

    }); 
} 

。私public static void main(String[] args)

私は次のように宣言した:

while(frame.value.equalsIgnoreCase("")) 
{ 
    try 
    { 
     System.out.println("waiting..."); 
     Thread.sleep(1000); 
    } 
    catch(InterruptedException ie) 
    { 
    System.out.println("interrupted"); 
    } 
} 

私はちょうど私がそれを使用する変数「価値」毎回クリアする必要があり、それが将来の使用のために再び空になっています。

私はそれを解決する最善の方法ではありませんが、それは私のために働いた。

0

以下のコードは、フォーカスを失ったときの価値をより効率的に取得する方法を示しています。

JFrame frame = new JFrame(); 
frame.setSize(50, 50); 
TextField field = new TextField(); 
field.addFocusListener(new FocusListener() { 

    @Override 
    public void focusLost(FocusEvent e) { 
     // continue from here 
     System.out.println(field.getText()); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     // TODO Auto-generated method stub 

    } 
}); 
frame.getContentPane().add(field); 
frame.setVisible(true); 
関連する問題