JTable動態加載表格

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

運行有結果如下:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章