Создавать независимые объекты класса - PullRequest
2 голосов
/ 24 сентября 2019

Я хочу создать более одного объекта класса, который не зависит друг от друга.

Я вызываю конструктор класса несколько раз в цикле 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);

    }

}

Когда я нажимаю на кнопку button в SecondGui GUIвыход всегда 1.Но я хочу, чтобы вывод был 0 или 1 в зависимости от того, в каком графическом интерфейсе я выбираю кнопку.

1 Ответ

0 голосов
/ 24 сентября 2019

Я хочу создать более одного объекта класса, который не зависит друг от друга.

Ваш текущий код создает 2 независимых объекта внутри этого цикла

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

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

Но поскольку вы сделали его статичным, он не привязан ни к какому экземпляру, который вы создаете.

Вам нужна переменная экземпляра, чтобы сохранить идентификатор для экземпляра 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);
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...