Подсчет индексов

342
25 июля 2017, 17:24

Есть таблица со столбцом boolean, нужно подсчитать кол-во выбранных строк, когда boolean = true, и это кол-во занести в переменную. Нашел индексы строк когда boolean true. Теперь хочу подсчитать кол-во индексов, и занести в переменную, как это организовать? (Установил столбцу boolean 5 true из 100, в переменную упала значение 5 ...)

table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            if (table.getSelectedRow() >= 0) {
                for (int i = 0; i < table.getRowCount(); i++) {
                    if (isRowChecked((Boolean) table.getValueAt(i, table.getColumnModel().getColumnIndex("Столбец")))==true) {
                        System.out.println(i);
                    }
                }
            }
        }
    }
});

Сделал так, но выбрал 4 checkbox (4 true) отобразило мол 4 выбрано, потом резко передумал и снял 1 выделение (стало 3 true) отображает также 4. Если еще сниму выделение, т.е 2 true в итоге, отображает выделено 2. Почему такой момент происходит с 3 выделениями ? почему пишет что выделено 4 ? И не реагирует выделение на 1 строки в таблице (0 index)

table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            int counter = 0;
            if (table.getSelectedRow() >= 0) {
                for (int i = 0; i < table.getRowCount(); i++) {
                    boolean selCheckBox = isRowChecked((Boolean) table.getValueAt(i, table.getColumnModel().getColumnIndex("Столбец")));
                    int a = selCheckBox == true ? counter++ : counter;
                    LBLSelected.setText(String.valueOf(a));
                }
                int selectedAll = Integer.valueOf(LBLSelectedAll.getText());
                int selected = Integer.valueOf(LBLSelected.getText());
                LBLLees.setText(String.valueOf(selectedAll-selected));
                if (LBLSelected.getText().equals(LBLSelectedAll.getText())) {
                    imgStatus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/ok.png")));
                } else {
                    imgStatus.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/done.png")));
                }
            } else {
                LBLSelected.setText(String.valueOf(0));
            }
        }
    }
});

Отображает правильно, если после снятие true убрать фокус на др.строку А без смены фокуса .... ????

Answer 1

Можно сделать как-то так:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
    @Override
    public void valueChanged(ListSelectionEvent e) {
        long count = 0;
        if (!e.getValueIsAdjusting()) {
            if (table.getSelectedRow() >= 0) {
                count = IntStream.range(0, table.getRowCount())
                    .filter(i -> isRowChecked((Boolean) table
                        .getValueAt(i, table.getColumnModel().getColumnIndex("Столбец"))))
                    .count();
            }
        }
        // тут можно использовать count
    }
});
READ ALSO
MP3 файлы в Java

MP3 файлы в Java

Есть ли способ проиграть музыку в java? Только без xml, и тп

221
Invoke method with parameters

Invoke method with parameters

У меня есть проблема с рефлексией

208
Android: как правильно восстановить состояние после того, как приложение было убито ОС

Android: как правильно восстановить состояние после того, как приложение было убито ОС

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

218