はい、ここで皆さんがおっしゃる通りです。
GUI アプリの場合、ユーザー入力を処理する最善の方法は、イベントが発生するのを待つことです。
次に、メソッドを使用して入力を検証し、成功した場合はフローを続行して、別のページに移動できます。
ユーザー入力を検証し、成功した場合は何らかのアクションを実行するログイン画面の完全な (まだ単純な) 例を次に示します。
このコードには、この概念がどのように適用されるかを完全に実行可能なサンプルで示す以外に価値はありません 。
シンプルな GUI http://img229.imageshack.us/img229/1532/simplenz0.png
// * used for brevity. Preffer single class per import
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;
public class MatchString{
private final JTextField password;
private final JFrame frame;
public static void main( String [] args ){
MatchString.show();
}
public static void show(){
SwingUtilities.invokeLater( new Runnable(){
public void run(){
new MatchString();
}
});
}
private MatchString(){
password = new JPasswordField( 20 );
frame = new JFrame("Go to www.stackoverflow");
init();
frame.pack();
frame.setVisible( true );
}
private void init(){
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.add( new JPanel(){{
add( new JLabel("Password:"));
add( password );
}});
// This is the key of this question.
// the password textfield is added an
// action listener
// When the user press enter, the method
// validatePassword() is invoked.
password.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent e ) {
validatePassword();
}
});
}
private void validatePassword(){
// If the two strings match
// then continue with the flow
// in this case, open SO site.
if ( "stackoverflow".equals(password.getText())) try {
Desktop.getDesktop().browse( new URI("http://stackoverflow.com"));
frame.dispose();
} catch ( IOException ioe ){
showError( ioe.getMessage() );
} catch ( URISyntaxException use ){
showError( use.getMessage() );
} else {
// If didn't match.. clear the text.
password.setText("");
}
}
}