В соответствии с вашим MVC вы можете создать TableModel
, который знает, как читать данные пациента.
Однако лично я предпочел бы отделить управление данными пациента от представления, чтобы представление не заботилось о том, откуда берутся данные.
С этой целью я бы начал с создания объекта Patient
и объекта Treatment
, они будут хранить данные в автономном объекте, что упростит управление...
Вам нужно будет прочитать эти данные и проанализировать результаты...
List<Treatment> treatments = new ArrayList<Treatment>(25);
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String text = null;
while ((text = br.readline()) != null) {
String parts[] = text.split(",");
Treatmeant treament = new Treatment(parts[0],
parts[1],
parts[2],
parts[3]);
treatments.add(treament);
}
} // Handle exception as required...
Я бы обернул это в метод readTreatments
в каком-нибудь служебном классе, чтобы упростить его использование...
Где-то здесь я бы подумал об использовании автономной базы данных или даже XML-документа, но это только я.
Получив это, вы можете спроектировать TableModel
для его поддержки...
public class TreatmentTableModel extends AbstractTableModel {
protected static final String[] COUMN_NAMES = {
"Treatment-Number",
"Treatment-Name",
"Doctor-in-charge",
"Room-No",
};
protected static final Class[] COLUMN_CLASSES = new Class[]{
Integer.class,
String.class,
Doctor.class,
Integer.class,
};
private List<Treatment> treatments;
public TreatmentTableModel() {
this.treatments = new ArrayList<>();
}
public TreatmentTableModel(List<Treatment> treatments) {
this.treatments = new ArrayList<>(treatments);
}
@Override
public int getRowCount() {
return treatments.size();
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public String getColumnName(int column) {
return COUMN_NAMES[column];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return COLUMN_CLASSES[columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Treatment treatment = treatments.get(rowIndex);
Object value = null;
switch (columnIndex) {
case 0:
value = treatment.getNumber();
break;
case 1:
value = treatment.getName();
break;
case 2:
value = treatment.getDoctor();
break;
case 3:
value = treatment.getRoomNumber();
break;
}
return value;
}
}
Затем вы просто применяете его к тому, что JTable
вам нужно...
private JTable treatments;
//...
treatments = new JTable(new TreatmentTableModel());
add(new JScrollPane(treatments));
Затем, если вам нужно, вы загрузите List
из Treatment
s и примените их к таблице...
File file = new File("...");
treatments.setModel(new TreatmentTableModel(TreatmentUtilities.readTreatments(file)));
18.07.2014
Treatment
List
. Контроллер знает, когда пользователь изменил представление (или хочет изменить представление), поэтому ему необходимо сообщить модели, когда загружать новые данные ИЛИ загрузить новые данные и передать эту информацию модели. Затем модель вызовет обновление, которое предупредит представление о перезагрузке моделиJTable
с новыми значениями, которые были загружены. 18.07.2014JTable
, вам необходимо предоставить некоторые средства, с помощью которых это представление может генерировать (дочернюю) табличную модель. Это предполагает, что ваша текущая модель должна предоставить некоторые средства для обеспеченияList
изTreatement
s... 18.07.2014