与您的 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));
然后,我们需要,您将加载Treatments 的List 并将其应用到表...
File file = new File("...");
treatments.setModel(new TreatmentTableModel(TreatmentUtilities.readTreatments(file)));