簡體   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