gpt4 book ai didi

java - 每次点击打开双倍数量的新框架

转载 作者:行者123 更新时间:2023-11-29 05:53:55 25 4
gpt4 key购买 nike

我写的一些代码有一些小问题来尝试一些东西。我制作了一个只有一个按钮的框架。当我点击这个按钮时,一个新的框架打开,它应该打开。我关闭新框架,然后再次单击按钮,尝试查看它是否仍然有效。问题从这里开始,更确切地说不是打开一个新框架,而是打开两个新框架。第三次我点击它打开 4 帧等等。我已经尝试了很多东西,但遗憾的是似乎无法找到它打开更多框架的原因。请帮忙。

package budget;

import java.awt.event.*;
import javax.swing.*;

public class GUI extends JFrame {

String labelPrefix;
JButton button;
JButton button2;
JLabel label;

public static void main(String[] args) {
JFrame f = new GUI();
f.setExtendedState(f.MAXIMIZED_BOTH);
f.setVisible(true);
}

public GUI() {
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

button = new JButton("Click Me");
label = new JLabel(labelPrefix);
p.add(button);
this.setTitle("Try");
getContentPane().add(p);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
button.addActionListener(new MyActionListener());
}

class MyActionListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
button.addActionListener(this);
labelPrefix = "Try";
JFrame f2 = new GUI(label, labelPrefix);
f2.setExtendedState(f2.MAXIMIZED_BOTH);
f2.setVisible(true);

}
}

public GUI(JLabel label, String labelPrefix) {
JPanel p2 = new JPanel();
button2 = new JButton("Close");
p2.add(label);
p2.add(button2);
this.setTitle("Try");
getContentPane().add(p2);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
button2.addActionListener(new MyActionListener2());
}

class MyActionListener2 implements ActionListener {

public void actionPerformed(ActionEvent e) {
button2.addActionListener(this);
dispose();
}
}
}

最佳答案

很明显,问题出在这里:

button.addActionListener(this);

每次单击按钮时,它都会再次向按钮添加监听器。

只需删除该行,错误就会消失。一旦将监听器添加到按钮,它就会留在那里。触发后不会“消耗”。

关于java - 每次点击打开双倍数量的新框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894515/

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