关于从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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章