java - 创建一个类的独立对象
问题描述
我想创建一个类的多个对象,它们彼此独立。
我在 for 循环中多次调用类构造函数,但是如何识别这些对象?
我尝试使用一个静态变量来获取 for 循环索引的值,但是这个变量假定了 for 循环的最后一个索引的值。
这是代码:
Maingui.java
public class Maingui extends JFrame {
public static JFrame frame;
public static JButton runButton;
public Maingui() throws IOException {
frame = new JFrame("maingui");
setSize(1024,700);
setTitle("maingui");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(new BorderLayout());
runButton = new JButton("Run");
runButton.addActionListener(new RunBtnListener());
add(runButton);
}
}
RunBtnListener.java
public class RunBtnListener implements ActionListener {
ArrayList<SecondGui> menus = new ArrayList<SecondGui>();
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 2; i++) {
menus.add(new SecondGui(i));
}
}
}
SecondGui.java
public class SecondGui extends JFrame {
public static int c;
JFrame frame;
JButton button;
public SecondGui(int i) {
this.c = i;
frame = new JFrame("Test");
setSize(1024,700);
setTitle("Menu");
setLocationRelativeTo(null);
setVisible(true);
this.setLocation(50*i, 50*i);
// Set layout manager
setLayout(new BorderLayout());
button = new JButton("B");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("C: " + c);
}
});
add(button);
}
}
当我单击 GUI 中的按钮button
时SecondGui
,输出始终为1
. 但我希望输出将是0
或1
基于我选择按钮的 GUI。
解决方案
我想创建一个类的多个对象,它们彼此独立。
您当前的代码在此循环内创建 2 个独立对象
for(int i = 0; i < 2; i++) {
menus.add(new SecondGui(i));
}
但是当您将其设为静态时,它不受您创建的任何实例的限制。
您需要的是一个实例变量来保存实例的 ID SecondGui
。您可以创建一个新的构造函数并传递循环的索引。
public class SecondGui extends JFrame {
private int c = 0;
private JFrame frame;
private JButton button;
public SecondGui(int i) {
this.c = i;
initialize();
}
void initialize() {
frame = new JFrame("Test");
setSize(1024,700);
setTitle("Menu");
setLocationRelativeTo(null);
setVisible(true);
this.setLocation(50*i, 50*i);
// Set layout manager
setLayout(new BorderLayout());
button = new JButton("B");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("C: " + c);
}
});
add(button);
}
}
推荐阅读
- c# - 如何在单元测试中验证 EF Core DBContext 配置
- .net-core - Identity Server 4 上的关联失败
- python - 在 Docker 中使用 PYTHONDONTWRITEBYTECODE 有什么缺点吗?
- python - 表子集列的连接将返回对象而不是 sqlalchemy 上的数据
- avro - Avro 架构不兼容
- matlab - MATLAB 是否能够与 Unix 域套接字通信?
- snowflake-cloud-data-platform - 存储过程中日期格式的 snwoflake 问题
- python - 将脚本拆分为多个文件
- c++ - 未定义成员函数
- python - Tripadvisor 中使用 Selenium (xpath) 抓取的问题