1

シンプルなインストーラー/アクティベーターについて質問があります。プラットフォームの起動時に復元されます。私はチュートリアルhttp://platform.netbeans.org/tutorials/60/nbm-login.htmlを読んでいて、すべてがスムーズに進みましたが、アクションボタンを使用したダイアログ用に独自の JPanel フォームを用意しました。ユーザー名またはパスが正しくない場合に続行します。しかし、今では、それらが正しい場合は続行できません...

public class LoginForm extends javax.swing.JPanel {

public LoginForm() {
    initComponents();
}
private void initComponents() {...}

protected javax.swing.JButton jButtonExit;
protected javax.swing.JButton jButtonLogin;
protected javax.swing.JButton jButtonRemindPass;
private javax.swing.JLabel jLabelMsg;
private javax.swing.JLabel jLabelPassword;
private javax.swing.JLabel jLabelUsername;
private javax.swing.JPasswordField jPasswordFieldPass;
private javax.swing.JTextField jTextFieldUser;

public String getUsername() {
    return this.jTextFieldUser.getText();
}

public String getPassword() {
    return new String(this.jPasswordFieldPass.getPassword());
}

public void setErrorLabel(String msg) {
    jLabelMsg.setForeground(Color.RED);
    jLabelMsg.setText(msg);
}

public void setInfoLabel(String msg) {
    jLabelMsg.setForeground(Color.BLUE);
    jLabelMsg.setText(msg);
}
}

Installer.java で NotifyDescriptor を作成し、空の配列で setOptions を設定しました。どうすれば強制的に通知できますか DialogDisplayer.getDefault().notifyLater(nd);

ロード中にプラットフォームがスタックするため、先に進みます。

public class Installer extends ModuleInstall {

LoginForm lf;
NotifyDescriptor nd;

@Override
public void restored() {
    createLoginDialog();
}

private void createLoginDialog() {
    lf = new LoginForm();
    lf.jButtonLogin.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            authenticate();
        }
    });

    lf.jButtonExit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            exit();
        }
    });

    nd = new NotifyDescriptor.Message(lf, NotifyDescriptor.PLAIN_MESSAGE);
    nd.setOptions(new Object[]{});

    nd.addPropertyChangeListener(new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (NotifyDescriptor.CLOSED_OPTION.equals(evt.getNewValue())) {
                exit();
            }
        }
    });
   DialogDisplayer.getDefault().notifyLater(nd);
}

private void authenticate() {
    if (lf.getUsername().equals("user")) {
        if (lf.getPassword().equals("pass") {
            System.out.println("Login and pass OK!");

        } else {
            lf.setErrorLabel("Incorrect password");
        }
    } else {
        lf.setErrorLabel("Unknown username");
    }
}

private void exit() {
    LifecycleManager.getDefault().exit();
}
}
4

1 に答える 1

0

より良い方法は、DialogDescriptor を介してリスナーを作成することです。

 loginPanel = new LoginPanel(this, authenticationCookies);
    loginPanel.setName("loginPanel");
    loginDescriptor = new DialogDescriptor(loginPanel,
            "loginDialog",
            Boolean.TRUE,
            new Object[]{turnOff, login}, //my owna JButtons
            login,
            DialogDescriptor.DEFAULT_ALIGN,
            HelpCtx.DEFAULT_HELP,
            this, // my class implements actionListener !
            Boolean.FALSE);

      loginDescriptor.addPropertyChangeListener(new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals(DialogDescriptor.PROP_VALUE) && evt.getNewValue() ==        DialogDescriptor.CLOSED_OPTION) {
                LifecycleManager.getDefault().exit();
            }
        }
    });

    loginPanel.setDescriptor(loginDescriptor);
    //
    createDialog = DialogDisplayer.getDefault().createDialog(loginDescriptor);

}

そして今、私のアクションリスナー

  @Override
   public void actionPerformed(ActionEvent e) {
    synchronized (this) {
        if (e.getSource() == DialogDescriptor.CANCEL_OPTION) {
            LifecycleManager.getDefault().exit();
        } else {
            actionCommand = e.getActionCommand();
            if (login.equals(actionCommand)) {

            } else if (turnOff.equals(actionCommand)) {
                LifecycleManager.getDefault().exit();

            } else if (button.equals(e.getSource())) {
                loginDescriptor.setClosingOptions(null);

            } else if (cancel.equals(actionCommand)) {
                task.cancel();
                inAwt(loginDescriptor, new Object[]{login, turnOff});
                loginDescriptor.setMessage(loginPanel);
                loginPanel.warning("aborted");

            }
        }
    }
}

ジルカ

于 2012-12-15T08:50:27.913 に答える