コードを続行する前に、TextFieldに入力を待ちそれ以外の場合、変数は初期化されないため、コードはコンパイルされません。私のコードは、次のように見える、私は<code>TextField</code>を持っているグラフィカル・ユーザー・インターフェースを持っている
TextField
がプログラムの最初に空であるため、getText()
は値を取得しません。そのため、ポートは「0」のままです。
コードが続行される前に入力を待つ方法はありますか?解決策が見つかりました
コードを続行する前に、TextFieldに入力を待ちそれ以外の場合、変数は初期化されないため、コードはコンパイルされません。私のコードは、次のように見える、私は<code>TextField</code>を持っているグラフィカル・ユーザー・インターフェースを持っている
TextField
がプログラムの最初に空であるため、getText()
は値を取得しません。そのため、ポートは「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");
}
}
私はちょうど私がそれを使用する変数「価値」毎回クリアする必要があり、それが将来の使用のために再び空になっています。
私はそれを解決する最善の方法ではありませんが、それは私のために働いた。
以下のコードは、フォーカスを失ったときの価値をより効率的に取得する方法を示しています。
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);
あなたはまた、モーダルダイアログ( 'JOptionPane')を呼び出すなどテキストフィールドの変更や、ボタンのクリックで動作し、リスナーにコードを置くことができます。 – Thomas