получить логические значения из jtable - PullRequest
0 голосов
/ 14 февраля 2011

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

int row = jTMezziInt.getRowCount();
   int h=0;


        while (h<=row){
         chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue(); 
        //if chk is true I can read; 
        // if chk is false the execution stopped at the chk assignement; 
        if (chk)
        ((DefaultTableModel )this.jTMezziInt.getModel()).removeRow(h);
        row = jTMezziInt.getRowCount();
        h=h+1;
        }

        TableColumn Selez = jTMezziInt.getColumnModel().getColumn(6);

}

Для определения таблицы я использовал netbeas с редактором таблиц.

Спасибо всем за помощь;

1 Ответ

2 голосов
/ 14 февраля 2011

Из того, что я вижу, есть одна из двух возможных проблем.Наиболее вероятная проблема заключается в том, что вы начинаете с h = 0, а затем заканчиваете h = строкой (поскольку ваш цикл while выполняет итерацию, в то время как h <= row). </p>

Скажем, например, у вас есть 3 строки в таблице.Этот цикл теперь будет выполняться для h = 0, h = 1, h = 2 и h = 3, т.е. он выполняется 4 раза, но у вас есть только 3 строки (с индексами 0, 1 и 2 нет строки с индексом 3).Это приведет к исключению нулевого указателя на его последней итерации.Это поведение, которое вы видите?

Чтобы разобраться, просто установите условие цикла while h

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

Наконец, отметим, что если вы используете один из более поздних JDK, нет необходимости вызывать booleanValue () (это называется ненужной распаковкой).Это будет сделано автоматически для вас.Таким образом, вы можете изменить следующее:

chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue();

на:

chk= (Boolean)jTMezziInt.getValueAt(h, 6);

Это просто аккуратнее и лучше.

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