Jtable例子

一种古老的技术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();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值