java - 创建类的独立对象

标签 java

我想创建一个类中多个相互独立的对象。

我在 for 循环中多次调用类构造函数,但如何识别此对象?

我尝试使用一个采用 for 循环索引值的静态变量,但该变量采用 for 循环最后一个索引的值。

代码如下:

编程语言

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);

    }
}

运行BtnListener.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));

        }

    }

}

第二个Gui.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);

    }

}

当我在 SecondGui GUI 中单击按钮 button 时,输出总是 1。 但我希望根据我在哪个 GUI 中选择按钮,输出将是 01

最佳答案

I want to create more than one object of a class that are independent one from the other.

您当前的代码在此循环内创建了 2 个独立的对象

    for(int i = 0; i < 2; i++) {

        menus.add(new SecondGui(i));
    }

但是当您将其设为静态时,它不受您创建的任何实例的限制。

您需要一个实例变量来保存 SecondGui 实例的 ID。您可以创建一个新的构造函数并传递循环的索引。

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);
     }

}

关于java - 创建类的独立对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58079553/

相关文章:

java - 如何反向选择sql中的列?

java - HTMLUnit 密码设置问题

Java : download a web page using a URL from a specific server ip

java - 为 ClassLoader getResourceAsStream() 使用绝对路径

java - UTF-16 中字母 A 占用的字节数是多少?

java - 写入 firebase 在线程中返回异常

java - Hibernate原生sql连接查询

java - DTO 和 DAO 概念和 MVC

java - 无法从 flutter 应用程序连接到在 Google Cloud Run 上运行的 Java 后端

Java - 无需命令行即可使用 VM 参数运行 jar