актуализирайте всички TextFields всеки път, когато квадратче е отметнато с java

Имам поредица от JCheckBoxes(1-20) и всеки е свързан с JTextField(1-20). Бих искал всички текстови полета да се актуализират всеки път, когато има отметка в квадратче. Полетата трябва да се актуализират с формулата 100/(сума от квадратчетата, които са отметнати). Така че, ако отметка1 е отметната, текстово поле1 показва 100. Ако отметка15 също е отметнато, текстово поле1 и текстово поле15 показват 50. Точно сега, когато отметна отметка1, текстово поле1 показва 100, а когато отметна отметка2 показва 50, но текстово поле1 остава на 100, вместо също да се актуализира до 50. Какво мога да направя, за да накарам всички текстови полета да се актуализират едновременно?

es1-es20 са моите текстови полета p1 е текстовото поле, от което получавам 100. evensplit е моят масив от 20 текстови полета.

Освен това работи, освен ако не декларирам своя масив всеки за всяко текстово поле. Къде трябва да декларирам своя масив, така че всяко actionevent да има достъп до него?

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) ButtonModel

person mKorbel    schedule 06.05.2012
comment
Вижте също този пример, който обработва множество квадратчета за отметка в таблица. - person trashgod; 06.05.2012