關於從txt文件寫出數據到javaSwing 表格中

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class TextSeven extends JFrame {
JButton btn;
File file;
// private JPanel panel;
FileWriter writer = null;

public TextSeven() {
    intiComponent();

}

/**
 * 初始化窗體組件
 */
private void intiComponent() {

    file = new File("D:\\text1.txt");// 要寫入的文本文件
    if (!file.exists()) {// 如果文件不存在,則創建該文件
        try {
            file.createNewFile();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

    final JTable table = new JTable(new MyTableModel());

    btn = new JButton("保存");
    btn.setSize(80, 40);
    // btn.setLocation((table.getWidth()) / 2 - 40, table.getHeight() - 80);
    /* 用JScrollPane裝載JTable,這樣超出範圍的列就可以通過滾動條來查看 */
    JScrollPane scroll = new JScrollPane(table);
    JPanel mmJPanel = new JPanel();
    mmJPanel.add(scroll);
    mmJPanel.add(btn);
    add(mmJPanel);
    // 按鈕監聽的方法
    btn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            System.out.println(table.getColumnCount());
            System.out.println(table.getRowCount());
            StringBuffer stringBuffer = new StringBuffer();
            String msg = "";
            for (int x = 0; x < table.getRowCount(); x++) {
                for (int y = 0; y < table.getColumnCount(); y++) {

                    Object valueAt = table.getValueAt(x, y);
                    if (valueAt != null) {
                        if (y == 2) {

                            if (valueAt.toString().equals("true")) {
                                msg = "1";
                            } else {
                                msg = "0";
                            }

                        } else {
                            msg = valueAt.toString();
                        }
                        stringBuffer.append(msg+"\n");
                    }
                }
            }
            try {
                writer = new FileWriter("d://test.txt");// 獲取該文件的輸出流
                writer.write(stringBuffer.toString());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } finally {
                // 寫內容
                try {
                    writer.flush();
                    writer.close();// 關閉輸出流,施放資源
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } // 清空緩衝區,立即將輸出流裏的內容寫到文件裏
            }

        }
        /* 這裏重寫event事件處理方法 */

    });

    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.pack();
}

private class MyTableModel extends AbstractTableModel {
    /*
     * 這裏和剛纔一樣,定義列名和每個數據的值
     */
    String[] columnNames = { "帳號ID", "姓名", "選擇" };
    Object[][] data = new Object[20][3];
    Object[] txt = new Object[10000];

    /**
     * 構造方法,初始化二維數組data對應的數據
     */
    public MyTableModel() {
        try {
            FileReader reader = new FileReader("d://test.txt");
            BufferedReader br = new BufferedReader(reader);
            String str = null;
            int i = 0;

            while ((str = br.readLine()) != null) {
                // sb.append(str+"/n");

                txt[i] = str;
                System.out.println(txt[i]);
                i++;
                // System.out.println((i-1)%3);
            }
            reader.close();
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        int k = 0;
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                data[i][j] = txt[k++];
                if (data[i][j].toString().equals("1")) {
                    data[i][j] = new Boolean(true);

                } else if (data[i][j].toString().equals("0")) {
                    data[i][j] = new Boolean(false);
                }
            }
            if (txt[k] == null) {
                break;
            }
        }
    }

    // 以下爲繼承自AbstractTableModle的方法,可以自定義
    /**
     * 得到列名
     */
    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }

    /**
     * 重寫方法,得到表格列數
     */
    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    /**
     * 得到表格行數
     */
    @Override
    public int getRowCount() {
        return data.length;
    }

    /**
     * 得到數據所對應對象
     */
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }

    /**
     * 得到指定列的數據類型
     */
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return data[0][columnIndex].getClass();
    }

    /**
     * 指定設置數據單元是否可編輯.這裏設置"姓名","學號"不可編輯
     */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex < 0)
            return false;
        else
            return true;
    }

    /**
     * 如果數據單元爲可編輯,則將編輯後的值替換原來的值
     */
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        data[rowIndex][columnIndex] = aValue;
        /* 通知監聽器數據單元數據已經改變 */
        fireTableCellUpdated(rowIndex, columnIndex);
    }

}

public static void main(String[] args) {
    new TextSeven();

}

}

發佈了31 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章