繁体   English   中英

如何从java MVC中的arraylist .TXT文件显示JTable中的记录?

[英]How to display records in a JTable from an arraylist .TXT file in java MVC?

目前,这是我的主屏幕: 主屏幕 )我有2个文件:“ Patient.txt”和“ treatment.txt”,其中包含多个患者和治疗的记录。

我想做的是,每当我单击“显示治疗”或“显示患者”时,都在一个漂亮的JTable中显示所有这些记录,如下所示: 在此处输入图片说明

我正在为此医院管理系统使用MVC模型(带有HMSGUIModel.java,HMSGUIView.java,HMSGUIController.java,HMSGUIInterface.java文件),并使用以下代码添加记录:

 FileWriter tfw = new FileWriter(file.getAbsoluteFile(), true); 
                BufferedWriter tbw = new BufferedWriter(tfw);
                tbw.write(this.view.gettNumber() + "," + this.view.gettName() + "," +     this.view.gettDoctor() + "," + this.view.gettRoom());
                tbw.newLine();
                tbw.flush();
                JOptionPane.showMessageDialog(null, "Successfully added treatment!"); }

请帮助我如何添加阅读器,以显示从文本文件到表的所有记录?

提前谢谢了!!

与您的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));

然后,我们需要加载Treatment List并将其应用于表...

File file = new File("...");
treatments.setModel(new TreatmentTableModel(TreatmentUtilities.readTreatments(file)));

根据表的需求,您可以查看使用DefaultTableModel并使用该模型填充数据。 缺点是,您可能希望表具有特殊功能,例如无法编辑单元格,存储多于字符串等...在这种情况下,您可能需要扩展AbstractTableModel并为模型定义自己的行为。

一个简单的事情就是从默认模型开始并在此基础上进行扩展。

String[] myColumns = {"Treatment-Number","Treatment-Name", "Doctor-in-charge", "Room-No"};
// init a model with no data and the specified column names
DefaultTableModel myModel = new DefaultTableModel(new Object[myList.size()][4](), myColumns);

// assuming you have a list of lists...
int i = 0;
int j = 0;
for (ArrayList<Object> list : myList) {
    for ( Object o : list ) {
        myModel.setValueAt(o, i, j);  // set the value at cell i,j to o
        j++;
    }
    i++;
} 

JTable myTable = new JTable(myModel);  // make a new table with the specified data model
// ... do other stuff with the table

如果要访问表数据,请使用myTable.getModel()并更新数据。 这将自动更新表的视图(完成MVC连接)

在此处查找有关使用表的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM