<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    JTable學習筆記

    構建一個JTable之前,應該設計好表格的列頭以及行數據,分別用final數組保存之:
    final String [] names={"First Name","Last Name","Favorite Color",
                "Favorite Number","Vegetarian"};
    final Object [][] data={
        {"Mark","Andrews","Red",new Integer(2),new Boolean(true)},
        {"Tom","Chung","Green",new Integer(99),new Boolean(false)}
        };
    接下來,在創建JTable之前,需要構建一個實現了TableModel接口的AbstractTableModel類的實例,TableModel接口規定了JTable如何訪問表格中數據的模型。示例如下:
    TableModel dataModel =new AbstractTableModel(){
            public int getColumnCount(){return names.length;}//實現這個函數是必須的,因為抽象類AbstractTableModel中并沒有實現該函數
            public int getRowCount(){return data.length;}//實現這個函數是必須的,因為抽象類AbstractTableModel中并沒有實現該函數
            public Object getValueAt(int row,int col){return data[row][col];}//實現這個函數是必須的,因為抽象類AbstractTableModel中并沒有實現該函數
            public String getColumnName(int column){return names[column];}//如果需要自己來命名列名稱,就必須override該方法
            @SuppressWarnings("unchecked")
            public Class getColumnClass(int col){return getValueAt(0,col).getClass();}//這個方法也因該重寫,因為AbstractTableModel中的實現僅僅是“return Object.class;”,因此我們需要override該方法
            public boolean isCellEditable(int row,int col){return true;}//默認均返回false,因此如果希望表格的cell能夠被編輯,就需要override這個函數
            public void setValueAt(Object aValue,int row,int col){//默認情況下,該函數的函數體是空的,因此如果希望表格的cell中的值能夠被更改,就必須override該函數
                System.out.println("Setting value to: "+aValue);
                data[row][col]=aValue;
            }
    };
    接下來就可以創建JTable了:
    JTable tableView=new JTable(dataModel);
    至此,表格已經創建起來了。如果需要能夠對表格進行更進一步的操作,比如允許用戶編輯表格中各個單元格的內容,就需要看看下面的內容嘍:
    我個人認為編輯表格是以列為單位的,
    第一步,需要得到某一列:
    TableColumn colorColumn=tableView.getColumn(names[2]);
    第二步,需要給該列指定一個實現了TableCellEditor接口的編輯類,DefaultCellEditor類實現了該接口,因此直接構建DefaultCellEditor類的一個實例就ok了,需要說明的是,該類的實現方法只有三種,而且分別對應需要JCheckBox、JComboBox、JTextField三種類的實例:
    colorColumn.setCellEditor(new DefaultCellEditor(comboBox));
    第三步,給該列指定一個實現了TableCellRenderer接口的的渲染類(或稱作呈現/表現類),DefaultTableCellRenderer類實現了該接口,因此直接構建DefaultTableCellRenderer的一個實例就ok了:
    DefaultTableCellRenderer colorColumnRenderer=new DefaultTableCellRenderer();
            colorColumnRenderer.setBackground(Color.pink);
            colorColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
            colorColumnRenderer.setToolTipText("Click for combo box");
            colorColumn.setCellRenderer(colorColumnRenderer);
    需要說明的是,DefaultTableCellRenderer能夠設置的內容當然不局限于上述列出的這三個,還有很多,但是有一點很重要,就是如果你希望單元格的內容能夠按照某種方式來改變,比如用戶自己編輯了單元格內容后,我們如果希望單元格呈現的內容能夠根據用戶的輸入做更多的變化(而不僅僅是簡單的字符串替換,如果僅僅是字符串替換的話,那就不必廢這么多事了,DefaultTableCellRenderer類自帶的setValue實現方法就能夠完成任務了),而不在希望單元格的內容一成不變了,此時就不能簡單的創建一個DefaultTableCellRenderer類的實例了,而是需要創建一個DefaultTableCellRenderer類的派生類,而且需要override里面的setValue方法,通常我們都這樣做:
    DefaultTableCellRenderer numberColumnRenderer=new DefaultTableCellRenderer(){
            public void setValue(Object value){
                int cellValue=(value instanceof Number) ? ((Number)value).intValue() : 0;
                this.setForeground((cellValue > 30) ? Color.black : Color.red);
                super.setValue(value);
            }
    };
    在DefaultTableCellRenderer類中setValue方法的修飾符為protected,因此我們不能直接用DefaultTableCellRenderer的實例來使用該方法,而只能通過繼承DefaultTableCellRenderer類,然后在類的內部override該方法來實現定制特定的功能,從這里我們也能夠更深刻的理解為什么有些方法要定義成protected了,目的就是為了對外不可見,但是又能夠通過繼承的手段來實現用戶自己的定制,而且有些情況這是很必須的,比如在該處,我們可以試想一下,如果用public來修飾,則用戶可以直接通過產生實例來引用該方法,那么由于該類是作用于整個列的,而不僅僅是一個單元格,那么當你設定了setValue后,到底是該對列中所有的單元格都有效呢,還是該只對某一個單元格有效呢,這就很難說了。

    posted on 2007-12-20 23:20 so true 閱讀(1038) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲AV日韩精品一区二区三区| 可以免费观看一级毛片黄a| 亚洲精品国精品久久99热一| 日韩毛片在线免费观看| 亚洲成a人片在线观看播放| 亚洲另类无码专区首页| 在线成人精品国产区免费| 成人性生活免费视频| 中文字幕亚洲综合久久菠萝蜜| 亚洲不卡中文字幕| 成人免费一区二区三区在线观看| 亚洲伊人久久综合中文成人网| 久久久久亚洲精品无码蜜桃| 国产在线精品观看免费观看| 在线免费视频一区| 久久精品成人免费国产片小草| 亚洲天天在线日亚洲洲精| 美女黄频视频大全免费的| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲另类古典武侠| 嫩草视频在线免费观看| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 亚洲色欲啪啪久久WWW综合网| 特级淫片国产免费高清视频| 色吊丝免费观看网站| 亚洲成a人片77777kkkk| 五月婷婷在线免费观看| 自拍偷自拍亚洲精品偷一| 色播精品免费小视频| 色婷婷亚洲十月十月色天| 无码免费午夜福利片在线 | 国产精品亚洲精品| 亚洲AV无码国产剧情| 色拍自拍亚洲综合图区| 亚洲免费网站在线观看| 一个人免费观看视频www| 国产亚洲午夜精品| 亚洲免费网站观看视频| 一级成人生活片免费看| 亚洲精品久久久www| 亚洲毛片在线免费观看|