一种古老的技术java swing JFrame表格展示文本数据
package com.chizicheng.evaltable;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
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.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;
import java.util.regex.Pattern;
import javax.swing.DefaultCellEditor;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.table.DefaultTableCellRenderer;
public class EvalTable {
private JFrame frame = null;
private JTable table = null;
private Table_Model model = null;
private JScrollPane s_pan = null;
private JButton /*button_1 = null, button_2 = null,*/ button_3 = null;
private JTextField textRes;
private JPanel pane = null;
private double imageCount = 0.0;
public static String[] list;
public static String sourceFolderStr = "C:\\Users\\ewuumeg\\Documents\\MyDocuments\\OpenCV\\Package\\finalDevice_testImageSeg\\History_Home\\history\\2013925_204026_DT890B\\";
public EvalTable() {
frame = new JFrame("JTableTest");
pane = new JPanel();
button_3 = new JButton("计算");
button_3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveData();
}
});
pane.add(button_3);
textRes = new JTextField("This");
Dimension di = new Dimension(200, 20);
textRes.setPreferredSize(di);
pane.add(textRes);
model = new Table_Model(20);
table = new JTable(model);
table.setBackground(Color.white);
String[] age = { "16", "17", "18", "19", "20", "21", "22" };
JComboBox<String> com = new JComboBox<String>(age);
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(3).setCellEditor(new DefaultCellEditor(com));
tcm.getColumn(0).setPreferredWidth(80);
tcm.getColumn(1).setPreferredWidth(100);
tcm.getColumn(2).setPreferredWidth(50);
table.setRowHeight(80);
for (String dirItem : list) {
addData(dirItem);
}
s_pan = new JScrollPane(table);
frame.getContentPane().add(s_pan, BorderLayout.CENTER);
frame.getContentPane().add(pane, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setVisible(true);
}
private void addData(final String jpgName) {
imageCount += 1.0;
final String fileStr = jpgName.substring(0, jpgName.indexOf("."));
String inputfile = sourceFolderStr+fileStr+".txt";
BufferedReader d;
String temp = "";
try {
d = new BufferedReader(new FileReader(inputfile));
temp = d.readLine();
d.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String lastColumn = fileStr + ".jpg";
model.addRow(temp, true, lastColumn);
table.getColumnModel().getColumn(0).setCellRenderer(
new DefaultTableCellRenderer(){
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
String image = sourceFolderStr+list[row];
//System.out.println(image);
ImageIcon tmpIcon = new ImageIcon(image);
this.setIcon(tmpIcon);
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
return c;
}
});
table.updateUI();
}
/*private void removeData() {
model.removeRows(0, model.getRowCount());
table.updateUI();
}*/
// ������ݣ���ʱ�ǽ���ݴӿ���̨��ʾ����
private void saveData() {
int col = model.getColumnCount();
int row = model.getRowCount();
for (int i = 0; i < col; i++) {
System.out.print(model.getColumnName(i) + "\t");
}
System.out.print("\r\n");
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print(model.getValueAt(i, j) + "\t");
}
System.out.print("\r\n");
}
System.out.println("------------------------------------");
double trueCount = 0.0;
for (int k = 0; k < row; k ++) {
if ((Boolean) model.getValueAt(k, 2)) {
trueCount += 1.0;
}
}
double res = 100.0*trueCount/imageCount;
double falseCount = imageCount - trueCount;
System.out.println("The false ones are : " + falseCount);
System.out.println("Total are : " + imageCount);
System.out.println("The result is: " + res + "%");
textRes.setText("The result is: " + res + "%");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File path = new File(sourceFolderStr);
list = path.list(new DirFilter("(.*)jpg"));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirItem : list) {
System.out.println(dirItem);
}
new EvalTable();
System.out.println("读取图片并初始化JTable完毕\r\n------------------------------------");
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return pattern.matcher(name).matches();
}
}
class Table_Model extends AbstractTableModel {
private static final long serialVersionUID = -7495940408592595397L;
@SuppressWarnings("rawtypes")
private Vector content = null;
private String[] title_name = { "图片", "结果", "是否正确", "图片文件名" };
@SuppressWarnings("rawtypes")
public Table_Model() {
content = new Vector();
}
@SuppressWarnings("rawtypes")
public Table_Model(int count) {
content = new Vector(count);
}
@SuppressWarnings("unchecked")
public void addRow(String name, boolean sex, String age) {
@SuppressWarnings("rawtypes")
Vector v = new Vector(4);
v.add(0, new Integer(content.size()));
v.add(1, name);
v.add(2, new Boolean(sex));
v.add(3, age);
content.add(v);
}
public void removeRow(int row) {
content.remove(row);
}
public void removeRows(int row, int count) {
for (int i = 0; i < count; i++) {
if (content.size() > row) {
content.remove(row);
}
}
}
/**
* �ñ����ijЩֵ���ģ�����ҪsetValueAt(Object value, int row, int col)������ϲ���ʹ����Ч
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 2) {
return true;
}
return false;
}
/**
* ʹ�ĵ�������Ч
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public void setValueAt(Object value, int row, int col) {
((Vector) content.get(row)).remove(col);
((Vector) content.get(row)).add(col, value);
this.fireTableCellUpdated(row, col);
}
public String getColumnName(int col) {
return title_name[col];
}
public int getColumnCount() {
return title_name.length;
}
public int getRowCount() {
return content.size();
}
@SuppressWarnings("rawtypes")
public Object getValueAt(int row, int col) {
return ((Vector) content.get(row)).get(col);
}
/**
* �����������
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Class getColumnClass(int col) {
return getValueAt(0, col).getClass();
}
}