Получить индекс JComboBox в другом классе - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь создавать разные события при нажатии кнопки, которые зависят от индекса JComboBox. Поскольку фактический проект больше, чем в примере, два фрагмента кода находятся в разных классах:

public class GUI {

    private String[] difficultyStrings = {"Easy", "Middle", "Hard"};

    private JFrame frame = new JFrame();

    private JPanel panel = new JPanel();

    private JButton button = new JButton();

    private JComboBox<String> diffucltyBox = new JComboBox(difficultyStrings);

   public static void main(String[] args) {

        GUI guiObject = new GUI();
        guiObject.setGUI();
    }

    private void setGUI() {

        Problem problemObject = new Problem();

        button.setText("What index is selected?");
        button.addActionListener(e -> {

            problemObject.actions();
        });

        panel.add(button);
        panel.add(diffucltyBox);

        frame.add(panel);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(700, 700));
        frame.setSize(800, 800);
        frame.setTitle("SuperTicTacToe");
        frame.setVisible(true);
    }

    protected int getDifficulty() {

        int difficulty;
        difficulty = diffucltyBox.getSelectedIndex();

        return difficulty;
    }

}

И

public class Problem {

    public void actions() {

        GUI guiObject = new GUI();

        if(guiObject.getDifficulty() == 0) {

            System.out.println("Easy");
        }   

        else if(guiObject.getDifficulty() == 1) {

            System.out.println("Middle");
        }    

        else if(guiObject.getDifficulty() == 2) {

            System.out.println("Hard");
        }    

    }

}  

И независимо от того, что вы выберете «Задача - класс», всегда будет распечатываться «Легко»

1 Ответ

0 голосов
/ 30 августа 2018

Это имеет смысл. Вы создаете 2 экземпляра GUI. Один в вашей основной функции и один в классе задачи.

Для экземпляра в основной функции: вы показываете фрейм с помощью setVisible и позволяете пользователю сделать выбор в выпадающем списке.

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

Тем не менее, в этом случае вы получаете индекс выпадающего списка. Это точно ноль.

Вы не должны создавать новый экземпляр в классе задачи, а должны передавать показанный в качестве аргумента классу проблемы, например, Problem problemObject = new Problem (this);

Затем укажите его в конструкторе задачи в качестве аргумента, а не в создании нового.

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