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();
}
}