シンプルなインストーラー/アクティベーターについて質問があります。プラットフォームの起動時に復元されます。私はチュートリアル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();
}
}