Почему моя таблица не заполняется?
Проект без БД для учебных целях потом планирую добавить бд
Задача: отображать данные Students в таблице относящие к выборной Group
Имеем: Fraem(Views) приложения, список Groups и таблицу с Students, прописанный слушатель

в группе есть 23243 есть Student но он не отображается
Код для панелей со слушателем:
private void createLists() {
// Работа со списком групп;
List<Group> groups = controller.getGroup();
List<Student> students = controller.getStudents();
dflm = new DefaultListModel<Group>();
dflm.addAll(groups);
listGroup = new JList(dflm);
listGroup.setFont(new Font("Courier", Font.PLAIN, 18));
listGroup.setPrototypeCellValue("1232431353421 ");
listGroupPane = new JScrollPane(listGroup);
// Работа с таблицы студентов
stm = new StudentTableModel();
tableStudent = new JTable(stm);
tableStudentPane = new JScrollPane(tableStudent);
tableStudentPane.setPreferredSize(new Dimension(400, 400));
listGroup.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listGroup.addListSelectionListener(e -> {
Group group = (Group)dflm.getElementAt(((JList<?>)e.getSource()).
getSelectedIndex());
controller.getStudents_Group(group);
for (Student student: students) {
System.out.println(student);
stm.addStudents(students);
}
});
}
Пока просто должен добавить
Код StudentTableModel:
public class StudentTableModel extends AbstractTableModel {
private int columnCount = 2;
private List<Student> students;
public StudentTableModel(){
this.students = new ArrayList ();
for(Student student: this.students){
this.students.add(student);
}
}
public StudentTableModel(List<Student> students){
this.students = new ArrayList ();
for(Student student: students){
this.students.add(student);
}
}
@Override
public int getRowCount() {
return students.size();
}
@Override
public int getColumnCount() {
return columnCount;
}
public void addStudent(Student student){
this.students.add(student);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Student student = students.get(rowIndex);
switch (columnIndex){
case 0: return student;
case 1: return student.getScore();
}
return "";
}
@Override
public String getColumnName(int columnIndex){
switch (columnIndex){
case 0: return "Фамилия Имя";
case 1: return "Очко";
}
return "";
}
public void addStudents(List<Student> students) {
this.students.addAll(students);
}
}
Если так прописать то работает:
private void createLists() {
// Работа со списком групп;
List<Group> groups = controller.getGroup();
List<Student> students = controller.getStudents();
dflm = new DefaultListModel<Group>();
dflm.addAll(groups);
listGroup = new JList(dflm);
listGroup.setFont(new Font("Courier", Font.PLAIN, 18));
listGroup.setPrototypeCellValue("1232431353421 ");
listGroupPane = new JScrollPane(listGroup);
// Работа с таблицы студентов
stm = new StudentTableModel();
tableStudent = new JTable(stm);
tableStudentPane = new JScrollPane(tableStudent);
tableStudentPane.setPreferredSize(new Dimension(400, 400));
**stm.addStudents(students);**
listGroup.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
listGroup.addListSelectionListener(e -> {
Group group = (Group)dflm.getElementAt(((JList<?>)e.getSource()).
getSelectedIndex());
controller.getStudents_Group(group);
for (Student student: students) {
System.out.println(student);
}
});
}
Ответы (1 шт):
Автор решения: Ильмир Зиганшин
→ Ссылка
Вопрос решен: Надо было обновлять UI
private void createLists() {
...
listGroup.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if ( e.getClickCount() == 1 ) {
stm.removeAll();
Group group = (Group) listGroup.getSelectedValue();
List<Student> students = controller.getStudents_Group(group);
stm.addStudents(students);
tableStudent.updateUI();
}
}
});
Изменил SelectionListener на MouseListener выше описано Так же добавил метод в StudentTableModel для удаление прошлых данных
public class StudentTableModel extends AbstractTableModel {
...
public void removeAll() {
this.students.clear();
}