gpt4 book ai didi

java - JOptionPane 调用堆栈

转载 作者:行者123 更新时间:2023-12-01 16:08:51 25 4
gpt4 key购买 nike

我的 JOptionPane 遇到了一个小问题,如果发现错误的输入,我用它来警告用户。第一次就可以正常工作。但是,当我关闭调用该 JOptionPane 的 JFrame 并再次打开它时,这次它将调用它两次。每次关闭时它都会叠加。

我尝试寻找问题所在,但没有成功。我可以提供代码,但它相当大。

第三次编辑:我现在已经找到并解决了问题。

好的,我提供了我使用的代码。我已经把它删掉了,所以只显示必要的部分。我认为它不会编译,但这就是我使用 addActionListener();

public class BorderLayoutDemo extends JFrame implements ActionListener {

private JButton button1 = new JButton("L?gg till kund");
private JButton button2 = new JButton("Ta bort kund");
private JButton button3 = new JButton("Visa kund");
private JButton button4 = new JButton("Lista alla kunder");
private JButton button5 = new JButton("Avsluta");
private JButton button6 = new JButton("Change");

private JTextArea TextWindow = new JTextArea("Hej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\n");
private JScrollPane scrollPane = new JScrollPane(TextWindow); //l?gger in TextWindow s? att det f?r en scroll-bar

private JPanel aPanel = new JPanel();
private JFrame aFrame = new JFrame();

private JTextField aTextfield1 = new JTextField();
private JTextField aTextfield2 = new JTextField();

private JButton aButton1 = new JButton("L?gg till kund");
private JButton aButton2 = new JButton("St?ng");

public BorderLayoutDemo() {

setTitle("Bankregister");

setLayout(new BorderLayout());

JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
panel.setLayout(new GridLayout(6,1,55,5)); //row, cols, hgap, vgap

button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);

panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
panel.add(button6);

JPanel panel2 = new JPanel();
panel2.add(panel);

add(panel2,BorderLayout.WEST);
add(scrollPane,BorderLayout.CENTER);

setJMenuBar(menu());

setSize(600,300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);

}

public void addCustomer(boolean status) {


if(status) {

aFrame.setTitle("L?gg till kund");
aFrame.setSize(200,300);
aFrame.setLayout(new GridLayout(3,1));

aPanel.setLayout(new GridLayout(2,1)); //rad, kolumn

aPanel.add(aTextfield1);
aPanel.add(aTextfield2);

aButton1.addActionListener(this);
aButton2.addActionListener(this);
System.out.println("Foo!!!!!!!!!!!!!");

aFrame.add(aPanel);
aFrame.add(aButton1);
aFrame.add(aButton2);

aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aFrame.setLocationRelativeTo(null);
aFrame.setVisible(true);
}
else {

aFrame.setVisible(false);


}
}

public static void main(String[] args) {

new BorderLayoutDemo();
}

public void actionPerformed(ActionEvent e) {
if(e.getSource() == button1) {
setEnabled(false);
addCustomer(true);
}

//IFs f?r addCustomer();
else if(e.getSource() == aButton1) {

if((aTextfield1.getText().isEmpty() || aTextfield2.getText().isEmpty())) {
JOptionPane.showMessageDialog(null, "You miss to fill out the fields");
}
else {
JOptionPane.showMessageDialog(null, "Added");
Kund kund = new Kund(aTextfield1.getText(),aTextfield2.getText());
setEnabled(true);
register.add(kund);
}
}
else if(e.getSource() == aButton2) {
setEnabled(true);
addCustomer(false);
}

最佳答案

听起来您每次打开 JFrame 时都会添加“验证监听器”。因此,请检查您的“addListenerXXX”代码,以确保它仅添加/创建一次。

这也引出了一个问题:为什么要使用 JFrame 来实现此目的?通常,应用程序有一个 JFrame。然后,如果您需要一个窗口来输入数据,则创建一个 JDialog。

关于java - JOptionPane 调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1958821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com