JTable动态加载表格

来源:互联网 发布:php string indexof 编辑:程序博客网 时间:2024/05/16 08:17

JTable动态加载表格,数据是模拟的

这里写图片描述

public class LayoutTest extends JFrame {    /** serialVersionUID = 4567832137864545L */    private static final long serialVersionUID = 4567832137864545L;    /** 获取屏幕大小所用的变量 */    private Dimension screeSize;    private Insets insets;    /** 图片路径,image文件夹在项目根目录下 */    public final static String IMAGEFILEPATH = "image" + File.separator;    private static JTable table = null;    private LayoutTest() {        try {            // 设置显示样式            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        } catch (Exception e) {            e.printStackTrace();        }        // 获取屏幕大小        screeSize = Toolkit.getDefaultToolkit().getScreenSize();        insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());        // 设置窗口大小和位置,下面代码代表全屏        // this.setSize((screeSize.width - insets.left - insets.right),        // (screeSize.height - insets.top - insets.bottom));        this.setSize((screeSize.width - insets.left - insets.right) /2,                (screeSize.height - insets.top - insets.bottom) *2/3);        this.setTitle("动态表格测试");        // 设置窗体图标,需要的时候用        // String logoPath = IMAGEFILEPATH + "bz.png";        // this.setIconImage(new ImageIcon(logoPath).getImage());        JScrollPane scrollPanelService = new JScrollPane(getJTable());        this.getContentPane().add(scrollPanelService);        this.setVisible(true);        this.setLocationRelativeTo(null); // 窗口居于屏幕正中央        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    }    public static JTable getJTable(){        if(table==null){            table = new JTable();        }        String[] columnName = {"序号", "第一个字段","第二个字段", "第三个字段"};         Object[][] rowData = getAcceptAreaTableResult();         table.setModel(new DefaultTableModel(rowData, columnName));        return table;    }    /**     * 处理结果集     * @return     */    private static Object[][] getAcceptAreaTableResult() {        //模拟数据        Vector< Vector<Object>> nodeMessageQuery = new Vector<Vector<Object>>();        Vector<Object> v = new Vector<Object>();        v.add(new Random().nextInt(999));        v.add(new Random().nextInt(200));        v.add(new Random().nextInt(200));        nodeMessageQuery.add(v);        Vector<Object> v1 = new Vector<Object>();        v1.add(new Random().nextInt(999));        v1.add(new Random().nextInt(200));        v1.add(new Random().nextInt(200));        nodeMessageQuery.add(v1);        Vector<Object> v2 = new Vector<Object>();        v2.add(new Random().nextInt(999));        v2.add(new Random().nextInt(200));        v2.add(new Random().nextInt(200));        nodeMessageQuery.add(v2);        //处理数据,添加序号的大小以及返回的结果类型         int h = 1;        List<List<Object>> listResult = new ArrayList<List<Object>>();        List<Object> stringList = null;        Object[][] result = null;        for (int i = 0; i < nodeMessageQuery.size(); i++) {            stringList = new ArrayList<Object>();            for (int j = 0; j < nodeMessageQuery.get(i).size()+1; j++) {                        if(j==0){                            stringList.add(Integer.toString(h));//序号                        }else{                            stringList.add(nodeMessageQuery.get(i).get(j-1));                        }                }            h++;            if(stringList!=null){                listResult.add(stringList);            }        }        result = new Object[listResult.size()][4];        //此for循环是将集合中的值赋值给数组当中        for (int i = 0; i < listResult.size(); i++) {//行            for (int j = 0; j < 4; j++) {//列                if(listResult.get(i).size()!=0){                    result[i][j] = listResult.get(i).get(j);                }            }        }        return result;    }    public static void main(String[] args) {        new LayoutTest();        int delay = 2000; // seconds        ActionListener taskTimer = new ActionListener() {            public void actionPerformed(ActionEvent evt) {                getJTable();            }        };        new Timer(delay,taskTimer).start();    }}

表格的样式设计:如,表格内容居中,设计斑马线,字体的大小等等

public static void makeFace(JTable table) {        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){            /**serialVersionUID*/            private static final long serialVersionUID = 1234579841267L;            @Override            public Component getTableCellRendererComponent(JTable table,                    Object value, boolean isSelected,boolean hasFocus,                    int row, int column) {                if(row%2==0){                    setBackground(new Color(202,241,245));                }else{                    setBackground(new Color(255,255,255));                }                setHorizontalAlignment(JLabel.CENTER);// 表格内容居中                ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer())                .setHorizontalAlignment(DefaultTableCellRenderer.CENTER);// 列头内容居中                 table.getTableHeader().setFont(new Font("微软雅黑", Font.PLAIN, 13));                 table.getTableHeader().setResizingAllowed(true);                 table.setRowHeight(26);//设置行高                return super.getTableCellRendererComponent(table, value,                         isSelected, hasFocus, row, column);            }        };        for (int i = 0; i < table.getColumnCount(); i++) {            TableColumn col = table.getColumn(                    table.getColumnName(i));            col.setCellRenderer(renderer);        }        table.getTableHeader().setBackground(new Color(51, 102, 255));    }

运行有结果如下:

这里写图片描述