Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Необходимо сохранить выбор и затем повторно применить его.
, В первую очередь, необходимо будет получить список всех выбранных ячеек.
Затем, когда Вы перезагружаете JTable с новыми данными, необходимо программно повторно применить те те же выборы.
другое мнение, которое я хочу высказать, если число или строки или столбцы в Вашей таблице увеличиваются или уменьшаются после каждой перезагрузки модели таблицы, то не потрудитесь сохранять выбор.
пользователь, возможно, выбрал строку 2 столбца, 1 наличие значения говорит "Утку" перед моделью updation. Но после того, как модель updation те же самые данные может теперь произойти в строке 4 столбца 1 и Вашей строке первоначальной ячейки, 2 столбца 1 могли иметь новые данные, такие как "Свинья". Теперь при насильственной установке выбора на то, чем это было перед моделью updation, это не может быть тем, что хотел пользователь.
, Таким образом, программно выбор ячеек мог быть обоюдоострым мечом. Не делайте этого, если Вы не уверены.
У меня была та же проблема в приложении. В моем случае модель в таблице была списком объектов, где свойства объектов, где отображено на столбцах. В этом случае, когда список был изменен, я получил выбранный индекс и хранил объект, который был выбран прежде, чем обновить список. После того, как список изменяется и прежде чем таблица будет обновлена, я вычислил бы положение выбранного объекта. Если бы это все еще присутствовало после модификации, то я установил бы выбор на новый индекс.
установка Just выбранный индекс в таблице после модификации не будет работать, потому что объект может сменить положение в списке.
Как примечание стороны, я нашел, что работа с GlazedLists делает жизнь намного легче при контакте с таблицами.
Это - поведение по умолчанию. Если Вы звоните fireTableDataChanged()
, вся таблица, восстанавливают с нуля, поскольку Вы устанавливаете совершенно новую модель. В этом случае выбор, естественно, потерян. Если Вы звоните fireTableRowsUpdated()
, выбор также очищен в общих случаях. Единственный путь состоит в том, чтобы помнить выбор и затем установить это. К сожалению, нет никакой гарантии, что выбор будет все еще допустим. Будьте осторожны при восстановлении выбора.
Если я вспоминаю правильно, сохранение выбора и повторно применяя его - то, что мы сделали также...