首页 > 解决方案 > 创建一个类的独立对象

问题描述

我想创建一个类的多个对象,它们彼此独立。

我在 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 中的按钮buttonSecondGui,输出始终为1. 但我希望输出将是01基于我选择按钮的 GUI。

标签: java

解决方案


我想创建一个类的多个对象,它们彼此独立。

您当前的代码在此循环内创建 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);
     }

}

推荐阅读