是的,正如每个人在这里所说的那样。
对于 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("");
}
}
}