JToggleButton - как получить выбранное состояние?

Я делаю калькулятор BMR, и одна из моих панелей дает пользователю возможность изменить способ ввода высоты от см до футов / дюймов.

Вот блок кода, который имеет дело с указанной панелью.

    // Height JComponents
    heightLabel = new JLabel("Height:");
    heightCMField = new JTextField(4);
    heightFTField = new JTextField(3);
    heightFTLabel = new JLabel("ft");
    heightINCHLabel = new JLabel("inch");
    heightINCHField = new JTextField(3);
    cmButton = new JToggleButton("cm");
    feetButton = new JToggleButton("feet");
    heightPanel.add(heightLabel);


    if (cmButton.isSelected()) {
        heightPanel.add(heightCMField);
    } else if (feetButton.isSelected()) {
        heightPanel.add(heightFTField);
        heightPanel.add(heightFTLabel);
        heightPanel.add(heightINCHField);
        heightPanel.add(heightINCHLabel);
    } 

    heightPanel.add(cmButton);
    heightPanel.add(feetButton);

Моя проблема в том, что когда я нажимаю кнопку "кг" или "см", текстовые поля не отображаются, поэтому я думаю, что я использовал isSelected() как-то не так.

Изображение того, как это выглядит ниже. Вы можете видеть, что никакие текстовые поля не появляются, даже когда ноги выбраны. Что я могу сделать, чтобы это исправить?

1 ответ

Вам нужно добавить слушателя:

cmButton.addActionListener(event->{

    /**
     * Code to show heightCMField.
     */
});

feetButton.addActionListener(event-> {

    /**
     * COde to show heightFTField and heightINCHField 
     */
});  

И если вы используете JToggleButtonЯ полагаю, вы хотите использовать только один ToggleButton, который переключает ваш графический интерфейс. Так что, если это так, удалите cmButton а также feetButton, И добавьте только один новый ToggleButton, который делает все это.

JToggleButton switchButton = new JToggleButton();
switchButton.setText("cm");  

switchButton.addActionListener(event->{

    if(switchButton.getText().equals("feet")) {

        switchButton.setText("cm");
        /* Code to show heightFTField and heightINCHField */
    } else if(switchButton.getText().equals("cm")) {

        switchButton.setText("feet");
        /* Code to show heightCMField */
    }
});  

You can also go for `ItemListener`.
Другие вопросы по тегам