首先在框架上使用对话框。对话框旨在从用户那里收集少量信息。
我将为您要执行的每个操作创建一个单独的组件。在这些组件中,我将提供 setter 和 getter 以允许您访问由组件管理的信息。
从那里我将使用 aJOptionPane
或JDialog
向用户显示组件。对我来说使用一个而不是另一个的原因归结为开始能够控制操作按钮(Okay
例如Cancel
)。对于像登录对话框这样的东西,我想限制用户开始点击Login
按钮,直到他们提供了足够的信息来进行尝试。
基本的跟随将是这样的......
LoginDialog dialog = new LoginDialog(SwingUtilities.getWindowAncestor(this)); // this is a reference any valid Component
dialog.setModal(true); // I would have already done this internally to the LoginDialog class...
dialog.setVisible(true); // A modal dialog will block at this point until the window is closed
if (dialog.isSuccessfulLogin()) {
login = dialog.getLogin(); // Login is a simple class containing the login information...
}
LoginDialog
可能看起来像这样......
public class LoginDialog extends JDialog {
private LoginPanel loginPane;
public LoginDialog(Window wnd) {
super(wnd);
setModal(true);
loginPane = new LoginPanel();
setLayout(new BorderLayout());
add(loginPane);
// Typically, I create another panel and add the buttons I want to use to it.
// These buttons would call dispose once they've completed there work
}
public Login getLogin() {
return loginPane.getLogin();
}
public boolean isSuccessfulLogin() {
return loginPane.isSuccessfulLogin();
}
}
该对话框只是充当登录窗格的代理/容器。
这当然是一个概述,您需要填写空白;)
现在,如果您不想麻烦地创建自己的对话框,您可以利用它JOptionPane
来代替。
LoginPanel loginPane = new LoginPanel();
int option = JOptionPane.showOptionDialog(
this, // A reference to the parent component
loginPane,
"Login", // Title
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, // You can supply your own icon it if you want
new Object[]{"Login", "Cancel"}, // The available options to the user
"Login" // The "initial" option
);
if (option == 0) {
// Attempt login...
}