私は、コンソールアプリケーションをSwingを使用するものに変換しています。現時点で私のプログラムはこれと同様のことをしたいです.nextInt();
.getText();
または類似のものを使ってどうすればいいですか?テキストフィールドの入力を待つ方法は?
要するに、
ユーザーがテキストフィールドに何かを入力してEnterを押すまで、プログラムの実行を保持する方法を教えてください。
私は、コンソールアプリケーションをSwingを使用するものに変換しています。現時点で私のプログラムはこれと同様のことをしたいです.nextInt();
.getText();
または類似のものを使ってどうすればいいですか?テキストフィールドの入力を待つ方法は?
要するに、
ユーザーがテキストフィールドに何かを入力してEnterを押すまで、プログラムの実行を保持する方法を教えてください。
更新:したがって、ユーザーがGUIから何かを入力するまで待つ必要があります。これは可能ですが、がに同期する必要があります。GUIは別のスレッドで実行されるためです。
だから手順は次のとおり
holder.wait()
を使用して)入力するための「論理」スレッドが待機holder.notify()
)が通知されます全例:
public static void main(String... args) throws Exception {
final List<Integer> holder = new LinkedList<Integer>();
final JFrame frame = new JFrame("Test");
final JTextField field = new JTextField("Enter some int + press enter");
frame.add(field);
field.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronized (holder) {
holder.add(Integer.parseInt(field.getText()));
holder.notify();
}
frame.dispose();
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
// "logic" thread
synchronized (holder) {
// wait for input from field
while (holder.isEmpty())
holder.wait();
int nextInt = holder.remove(0);
System.out.println(nextInt);
//....
}
}
コンソールアプリケーションとGUIアプリケーションが動作中はかなり異なっています。コンソールアプリケーションはコマンドライン引数から入力を受け取り、GUIアプリケーションがイベントメカニズムによって駆動されている間にキーボードから入力されたユーザ入力を待って、タスクを実行します。
たとえば、TextFieldオブジェクトをフレームに追加し、テキストフィールドオブジェクトにkeyListenerを追加します。リスナーは、キーイベントが通知されたときに呼び出されます。そこには多くの例があります。公式のJavaの例http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html
質問がまだ分かりません - 「実行を保留」とはどういう意味ですか?それとは別に:基本的なSwingチュートリアルとテキストフィールドのAPIドキュメントを読んでください(ヒント:setActionは一見価値があります:-) – kleopatra