обновлять все TextFields каждый раз, когда флажок установлен с помощью java

У меня есть ряд JCheckBoxes (1-20), и каждый связан с JTextField (1-20). Я хотел бы, чтобы все текстовые поля обновлялись каждый раз, когда флажок установлен. Поля должны быть обновлены по формуле 100/(сумма отмеченных флажков). Итак, если флажок checkbox1 установлен, то textfield1 отображает 100. Если флажок checkbox15 также отмечен, тогда textfield1 и textfield15 отображают 50. Прямо сейчас, когда я проверяю checkbox1, тогда textfield1 отображает 100, а когда я проверяю checkbox2, отображается 50, но textbox1 остается на 100 вместо того, чтобы также обновляться до 50. Что сделать, чтобы все текстовые поля обновлялись одновременно?

es1-es20 — мои текстовые поля. p1 — текстовое поле, из которого я получаю 100. evensplit - это мой массив из 20 текстовых полей.

Кроме того, это работает, если я не объявлю свой массив для каждого текстового поля. Где я должен объявить свой массив, чтобы каждое действие могло получить к нему доступ?

private void es1ActionPerformed(java.awt.event.ActionEvent evt) {
    JCheckBox evensplit[] = new JCheckBox[24];
    evensplit[0] = es1;
    evensplit[1] = es2;
    ...24 times

    int checknums = 0;

    for(int c = 0;c< evensplit.length; c++) {
        if(evensplit[c].isSelected()) {
            checknums++;
            double even = 100/checknums;
            p1.setText(String.valueOf(even));
        }
    }
}

private void es2ActionPerformed(java.awt.event.ActionEvent evt) {
    JCheckBox evensplit[] = new JCheckBox[24];
    evensplit[0] = es1;
    evensplit[1] = es2;
    ...24 times

    int checknums = 0;

    for(int c = 0;c< evensplit.length; c++) {
        if(evensplit[c].isSelected()) {
            checknums++;
            double even = 100/checknums;
            p2.setText(String.valueOf(even));
        }
    }

Заранее благодарю за любую помощь!


person just eric    schedule 06.05.2012    source источник


Ответы (2)


Значение, которое вы хотите установить, зависит от проверки всех флажков, но вы устанавливаете значение (setText()), пока вы все еще находитесь в цикле. Вам нужно будет перебрать все флажки, чтобы подсчитать отмеченные, ЗАТЕМ пройтись по всем полям, чтобы установить значения.

Чтобы один массив был доступен обеим подпрограммам, объявите его как переменную экземпляра; он будет внутри класса, но вне любого из методов.

person arcy    schedule 06.05.2012

для JCheckBox/JRadioButton/JToggleButton или JComboBox использовать

1) ItemListener

2) ButtonGroup

3) Модель кнопки

person mKorbel    schedule 06.05.2012
comment
См. также этот пример, который обрабатывает несколько флажков в таблице. - person trashgod; 06.05.2012