Поскольку Swing уже поддерживает MVC (в обратном порядке), вам следует начать с TableModel
, чтобы обернуть существующие данные.
Данные из базы данныхуже смоделированный в классе Student
, который является хорошим местом для начала, вам просто нужно создать TableModel
, который обтекает его.Вы должны начать с рассмотрения Как использовать таблицы
Начиная с базовой концепции Student
public interface Student {
public int getID();
public String getSSN();
public String getName();
public String getAddress();
public String getPhoneNumber();
}
Затем мы можем разработать TableModel
, которыйможет использоваться для его поддержки ...
public class StudentTableModel extends AbstractTableModel {
protected static final String COLUMN_NAMES[] = {
"ID", "Number", "Name", "Address", "Phone Number"
};
private List<Student> students;
public StudentTableModel(List<Student> students) {
// Prevent possible external mutation
this.students = new ArrayList<>(students);
}
@Override
public int getRowCount() {
return students.size();
}
@Override
public int getColumnCount() {
return COLUMN_NAMES.length;
}
@Override
public String getColumnName(int column) {
return COLUMN_NAMES[column];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0: return Integer.class;
default: return String.class;
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Student student = students.get(rowIndex);
switch (columnIndex) {
case 0: return student.getID();
case 1: return student.getSSN();
case 2: return student.getName();
case 3: return student.getAddress();
case 4: return student.getPhoneNumber();
}
}
}
Это не изменяемая модель, я оставлю вас, чтобы выяснить, как добавить изменяемые функции.
Итак, в вашемвид, вы бы использовали контроллер, чтобы получить один или несколько Student
s ...
Student student = controller.getOneSpecificStudent(1);
Затем вы бы создали модель для студента ...
List<Student> students = new ArrayList<>();
students.add(student);
TableModel model = StudentTableModel(students);
А затем примените его к вашему мнению ...
someInstanceOfJTable.setModel(model);
Сейчас.При необходимости контроллер может вернуть StudentTableModel
, но я лично считаю, что это выходит за рамки контроллера, поскольку он не должен диктовать условия отображения представлению, это не его ответственность.