0

我如何着手创建我在下面描述的内容?

首先,这是我的 GUI 的基本外观:

在此处输入图像描述

当我单击时,Add New Account我想让 GUI 弹出一个小窗口,用户可以在其中输入登录凭据。我需要将这些信息传递回主 GUI,所以我不知道如何处理这个问题。

Preferences或也是如此Remove Account。我如何着手创建各种“GUI 覆盖”。抱歉,我无法找出我正在寻找的效果的正确术语。

我想尝试使用JOptionPane's,但经过一些研究,这似乎不是要走的路线。

JFrame当动作开始时,我也在玩弄创造一个新的想法。应该如何处理?

4

1 回答 1

3

首先在框架上使用对话框。对话框旨在从用户那里收集少量信息。

我将为您要执行的每个操作创建一个单独的组件。在这些组件中,我将提供 setter 和 getter 以允许您访问由组件管理的信息。

从那里我将使用 aJOptionPaneJDialog向用户显示组件。对我来说使用一个而不是另一个的原因归结为开始能够控制操作按钮(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...
}
于 2012-12-04T00:15:03.677 回答