gpt4 book ai didi

java - 程序中的各种 JFrame

转载 作者:行者123 更新时间:2023-11-30 05:25:23 27 4
gpt4 key购买 nike

在程序中,我想在按下按钮时打开许多框架。每次按下按钮时,我都会创建一个框架实例,并使用“setVisible”方法使其可见,但每次按下按钮时,框架都会以指数方式生成。

也就是说,如果我有 2 个打开的框架,并且按下按钮,则会打开 4 个以上的框架,如果我再次按下它,则会打开 8 个,依此类推。

这是我的代码

public class ex {

public static void main(String[] args) {

frame fr = new frame ();
fr.setVisible(true);

}

}
<小时/>
public class frame extends JFrame{

static int i=1;
static JButton bt1 = new JButton("Next");

public frame () {
super ("Example"+i);
setSize(600,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(400,200);
setResizable(false);
setLayout(new GridLayout(2,1));

JLabel et1 = new JLabel("frame"+i);

this.add(et1);
this.add(bt1);

AL actionListener = new AL ();
bt1.addActionListener(actionListener);

}
}
<小时/>
import java.awt.event.*;

public class AL implements ActionListener{

public void actionPerformed (ActionEvent e) {

if(e.getSource()==frame.bt1) {
frame.i++;
frame fr = new frame ();
fr.setVisible(true);
}
}
}

最佳答案

这里的问题是我们对 bt1 使用了 static 修饰符。使用 static 关键字,我们在第一次调用 frame 构造函数时创建一个新按钮。在每次后续调用 frame 构造函数时,不会创建一个新按钮。相反,static 关键字导致按钮仅在第一次调用时创建一次。

每次创建新的 JFrame 时,它​​实际上对每个 JFrame 使用相同按钮。这反过来会导致您所看到的行为。

当您创建第一个框架时,它会附加 bt1。当您单击下一步时,它将创建第二个框架,并附加相同 bt1。更重要的是,当您调用此构造函数时,您创建了一个新的 ActionListener 并将其附加到 same 按钮。因此,每次调用此构造函数时,您都会向所有帧中使用的同一按钮对象添加另一个监听器。

问题的根源在于,对于每个构造函数,我们都会向相同按钮添加一个新的 ActionListener。

我相信您可以通过以下两种方法之一解决此问题。

  1. 使 bt1 非静态,以便每个框架对象都有自己唯一的按钮
  2. 将框架构造函数中的 actionListener 设为静态。在这种情况下,所有框架将使用相同的按钮。所有按钮都将使用相同的(且单一的)actionListener。

关于java - 程序中的各种 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770423/

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