Сохраните выбор JTable через изменение TableModel

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
15
задан Lahiru Ashan 25 November 2016 в 08:04
поделиться

4 ответа

Необходимо сохранить выбор и затем повторно применить его.

, В первую очередь, необходимо будет получить список всех выбранных ячеек.

Затем, когда Вы перезагружаете JTable с новыми данными, необходимо программно повторно применить те те же выборы.

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

пользователь, возможно, выбрал строку 2 столбца, 1 наличие значения говорит "Утку" перед моделью updation. Но после того, как модель updation те же самые данные может теперь произойти в строке 4 столбца 1 и Вашей строке первоначальной ячейки, 2 столбца 1 могли иметь новые данные, такие как "Свинья". Теперь при насильственной установке выбора на то, чем это было перед моделью updation, это не может быть тем, что хотел пользователь.

, Таким образом, программно выбор ячеек мог быть обоюдоострым мечом. Не делайте этого, если Вы не уверены.

4
ответ дан 1 December 2019 в 04:58
поделиться

У меня была та же проблема в приложении. В моем случае модель в таблице была списком объектов, где свойства объектов, где отображено на столбцах. В этом случае, когда список был изменен, я получил выбранный индекс и хранил объект, который был выбран прежде, чем обновить список. После того, как список изменяется и прежде чем таблица будет обновлена, я вычислил бы положение выбранного объекта. Если бы это все еще присутствовало после модификации, то я установил бы выбор на новый индекс.

установка Just выбранный индекс в таблице после модификации не будет работать, потому что объект может сменить положение в списке.

Как примечание стороны, я нашел, что работа с GlazedLists делает жизнь намного легче при контакте с таблицами.

1
ответ дан 1 December 2019 в 04:58
поделиться

Это - поведение по умолчанию. Если Вы звоните fireTableDataChanged(), вся таблица, восстанавливают с нуля, поскольку Вы устанавливаете совершенно новую модель. В этом случае выбор, естественно, потерян. Если Вы звоните fireTableRowsUpdated(), выбор также очищен в общих случаях. Единственный путь состоит в том, чтобы помнить выбор и затем установить это. К сожалению, нет никакой гарантии, что выбор будет все еще допустим. Будьте осторожны при восстановлении выбора.

1
ответ дан 1 December 2019 в 04:58
поделиться

Если я вспоминаю правильно, сохранение выбора и повторно применяя его - то, что мы сделали также...

0
ответ дан 1 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: