在我的简单登录窗口中,我将Action Listener添加到了我的登录按钮。按下按钮,程序将检查用户输入的信息,如果他们输入错误的信息3次,程序将创建一个新的JDialog通知用户,该程序将关闭。
我的问题是JDialog显示为空白,然后程序关闭。
这是我的代码
btnLogIn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
char[] pass = pssPassWord.getPassword();
String pss = new String(pass);
if (!pss.toString().equals("admin") || !txtUserName.getText().equals("Adminuser")){
if (attempts == 2){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Inform("You entered the wrong info 3 times, the program will shut down");
try {
Thread.sleep(1000);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}else {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Info("Wrong info, please check the info");
}
});
attempts += 1;
}
}else{
}
}
});
这是我的Inform类:
public class Inform extends JDialog{
private JPanel pnlInform;
private JLabel lblInform;
private JButton btnOK;
public Inform(String info){
setContentPane(pnlInform);
lblInform.setText(info);
pack();
setVisible(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
});
}
}
我的IDE是Intellij IDEA,我使用表单类来创建GUI,因此没有元素声明。
答案 0 :(得分:0)
您没有将任何组件添加到Inform
对话框,因为pnlInform
未构建并解析为null
并且它将通过contentPane cannot be set to null.
解决方案:构造组件(pnlInform,lblInform,btnOK),然后将它们添加到对话框中。您可以在下面找到功能完整的代码:
package test.q5;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Inform extends JDialog {
private JPanel pnlInform=new JPanel();
private JLabel lblInform=new JLabel();
private JButton btnOK=new JButton("OK");
public Inform(String info) {
// setContentPane(pnlInform);
add(pnlInform);
lblInform.setText(info);
pnlInform.add(lblInform);
pnlInform.add(btnOK);
pack();
setVisible(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
dispose();
}
});
}
public static void main(String[] args) {
new Inform("Hello");
}
}
但是,您仍然需要对邮件进行一些格式化,请随时将其添加为另一个问题以便提供帮助。