现有一个hello.txt文件,要把里面的数据插入到JTable中去。
hello.txt为: s001 24 male 93
excellent A
s002 25 female 57
fail D
s004 26 male 63
pass C
要求插入到3X6的表格中,也就是说第一行为s001 24 male 93 excellent A以此类推。
当然数据不止这么少,格式差不多是这样。 难点是,一行记录在txt文本中并不是一行,而是拆分为两行。
哪个高手有好的解决方案?思路或是源码。
在线等…………
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;public class SimpleTable extends JFrame
{
/* 表格列向量 */
Vector cell;
public SimpleTable(String path)
{
//read file method
readFile(path);
/* 表格行向量 */
Vector row = new Vector();
/* 聲明表格模型 */
DefaultTableModel tableModel = new DefaultTableModel();
/* 聲明表格頭數組 */
String[] tableHeads = { "1", "2", "3", "4", "5", "6"};
/* 將表格頭轉換為向量類型,以備表格模式使用 */
Vector tableHeadName = new Vector();
for(int i = 0; i < tableHeads.length; i++)
{
tableHeadName.add(tableHeads[i]);
}
/* 設置表格模式 */
tableModel.setDataVector(row, tableHeadName);
/* 表格使用模式 */
JTable table = new JTable(tableModel);
table.setRowHeight(20);
/* new Cursor(1)設置鼠標指針式樣,12為手型 */
table.setCursor(new Cursor(12)); table.setSelectionBackground(Color.black);
table.setSelectionForeground(Color.white);
table.setGridColor(Color.black);
makeFace(table);
table.setBackground(new Color(206, 120, 50));
table.setCellSelectionEnabled(false); JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setCursor(new Cursor(12));
this.getContentPane().add(scrollPane);
this.setTitle("使用JTable表格");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void readFile(String path)
{ } /* 表格間隔色顯示方法 */
public static void makeFace(JTable table)
{
try
{
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
if (row % 2 == 0)
setBackground(Color.white); /* 設置奇數行底色 */
else if (row % 2 == 1)
setBackground(new Color(206, 231, 255)); /* 設置偶數行底色 */
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
};
for(int i = 0; i < table.getColumnCount(); i++)
{
table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);
}
}
catch(Exception ex)
{
ex.printStackTrace();
} } public static void main(String[] args)
{
SimpleTable test = new SimpleTable("table.txt");
}
}
内容如下:
s001 24 male 93
excellent A
s002 25 female 57
fail D
s004 26 male 63
pass CreadFile 方法楼主可以继续修正。
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;public class SimpleTable extends JFrame
{
/* 表格列向量 */
Vector cell;
Vector row = new Vector();
public SimpleTable(String path)
{
//read file method
readFile(path);
/* 表格行向量 */
/* 聲明表格模型 */
DefaultTableModel tableModel = new DefaultTableModel();
/* 聲明表格頭數組 */
String[] tableHeads = { "1", "2", "3", "4", "5", "6"};
/* 將表格頭轉換為向量類型,以備表格模式使用 */
Vector tableHeadName = new Vector();
for(int i = 0; i < tableHeads.length; i++)
{
tableHeadName.add(tableHeads[i]);
}
/* 設置表格模式 */
tableModel.setDataVector(row, tableHeadName);
/* 表格使用模式 */
JTable table = new JTable(tableModel);
table.setRowHeight(20);
/* new Cursor(1)設置鼠標指針式樣,12為手型 */
table.setCursor(new Cursor(12)); table.setSelectionBackground(Color.black);
table.setSelectionForeground(Color.white);
table.setGridColor(Color.black);
makeFace(table);
table.setBackground(new Color(206, 120, 50));
table.setCellSelectionEnabled(false); JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setCursor(new Cursor(12));
this.getContentPane().add(scrollPane);
this.setTitle("使用JTable表格");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private void readFile(String path)
{
BufferedReader reader = null;
int line = 0;
String[] line1 = null;
String[] line2 = null;
try
{
reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
String str = null;
while((str = reader.readLine()) != null)
{
line++;
if(line % 2 != 0)
{
line1 = str.replaceAll("[ ]+", ",").split(",");
}
else
{
line2 = str.replaceAll("[ ]+", ",").split(",");
}
if(line % 2 == 0)
{
cell = new Vector();
for(int i = 0; i < line1.length; i++)
cell.add(line1[i]);
for(int i = 1; i < line2.length; i++)
cell.add(line2[i]);
row.add(cell);
}
}
}
catch(Exception e)
{
e.printStackTrace();
return;
}
} /* 表格間隔色顯示方法 */
public static void makeFace(JTable table)
{
try
{
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
if (row % 2 == 0)
setBackground(Color.white); /* 設置奇數行底色 */
else if (row % 2 == 1)
setBackground(new Color(206, 231, 255)); /* 設置偶數行底色 */
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
};
for(int i = 0; i < table.getColumnCount(); i++)
{
table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);
}
}
catch(Exception ex)
{
ex.printStackTrace();
} } public static void main(String[] args)
{
SimpleTable test = new SimpleTable("table.txt");
}
}