我使用Java Swing完成了一些基本的桌面应用程序。但是,我希望利用自己的技能开发一个涉及用户身份验证的更复杂的应用程序。
我希望有一个包含JTextField
的开启窗口来接受用户的用户名和密码。在成功验证(检查数据库中的用户详细信息)后,我想要一个新窗口,其中包含有关用户的一些信息。
如何使用Swing实现这种多窗口效果?
谢谢!
答案 0 :(得分:2)
JDialog
。JFrame
。*不要从对话框中进行身份验证,只需让您的UI保持UI状态。
答案 1 :(得分:2)
引用蓝彼得的话,“这是我之前制作的”。我已将其实现为JPanel
,然后将其嵌入JDialog
方法的main
中。请注意,在首次显示对话框时,有一个钩子可以使密码字段获得焦点。
class LoginPanel extends JPanel {
private final JTextField userNameTxtFld;
private final JPasswordField passwordFld;
public LoginPanel() {
super(new GridBagLayout()); // GridBagLayout: Not everyone's bag.
this.userNameTxtFld = new JTextField(12);
this.passwordFld = new JPasswordField(12);
userNameTxtFld.setText(System.getProperty("user.name"));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = INSETS;
gbc.ipadx = 0;
gbc.ipady = 0;
gbc.weightx = 0.0;
gbc.weighty = 0.0;
gbc.gridx = 0;
gbc.gridy = 0;
int row = 0;
addLabelledComponent("User Name:", userNameTxtFld, this, gbc, 0, row++);
//noinspection UnusedAssignment
addLabelledComponent("Password:", passwordFld, this, gbc, 0, row++);
}
private boolean gainedFocusBefore;
void gainedFocus() {
if (!gainedFocusBefore) {
gainedFocusBefore = true;
passwordFld.requestFocusInWindow();
}
}
String getUserName() {
return userNameTxtFld.getText();
}
String getPassword() {
return new String(passwordFld.getPassword());
}
void reset() {
passwordFld.setText("");
}
public static void main(String[] args) {
final LoginPanel pnl = new LoginPanel();
JOptionPane op = new JOptionPane(pnl, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog dlg = op.createDialog("Login");
dlg.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowGainedFocus(WindowEvent e) {
pnl.gainedFocus();
}
@Override
public void windowLostFocus(WindowEvent e) {
}
});
dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dlg.setVisible(true);
System.exit(0);
}
}