フレーム上でダイアログを使用することから始めます。ダイアログは、ユーザーから小さな情報を収集するように設計されています。
実行する操作ごとに個別のコンポーネントを作成します。これらのコンポーネント内で、コンポーネントによって管理される情報にアクセスできるようにセッターとゲッターを提供します。
そこから、JOptionPane
または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...
}