來源:http://softbbs.pconline.com.cn/6945883.html

在API裡已經介紹了這個接口,此接口定义了要成为 JTable 中单元格渲染器的任意对象所需的方法。

下邊我將分析有哪些用途:

大家都知道JTable裡有個setDefaultRenderer(Class<?> columnClass,TableCellRenderer renderer)

容易理解的介紹下方法的參數(不是專業的):
columnClass指的是此單元格對象的Class,比如:
jTable.setDefaultRenderer(String.class,renderer);
說明這個renderer對String類型的對象起作用,
如想要所有的:jTable.setDefaultRenderer(Object.class,renderer);
這樣就可以了

我們返回來看TableCellRenderer 這個接口,實現
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
這個方法,這個方法的內容是我們自己添加的,根據不同的對單元格的要求,方法體自然不一樣

現在我們來看看這個接口的派生類:
DefaultTableCellRenderer, DefaultTableCellRenderer.UIResource(這個在這裡就不說了)
看下DefaultTableCellRenderer這個類
public class DefaultTableCellRenderer extends JLabel implements TableCellRenderer, Serializable
我們注意到它繼承了JLabel,到底繼承了哪些方法?作用是幹什麼的?在看API
从类 javax.swing.JLabel 继承的嵌套类/接口 
JLabel.AccessibleJLabel 
从类 javax.swing.JLabel 继承的字段 
labelFor 
从类 javax.swing.JLabel 继承的方法 
checkHorizontalKey, checkVerticalKey, getAccessibleContext, getDisabledIcon, getDisplayedMnemonic, getDisplayedMnemonicIndex, getHorizontalAlignment, getHorizontalTextPosition, getIcon, getIconTextGap, getLabelFor, getText, getUI, getUIClassID, getVerticalAlignment, getVerticalTextPosition, imageUpdate, paramString, setDisabledIcon, setDisplayedMnemonic, setDisplayedMnemonic, setDisplayedMnemonicIndex, setHorizontalAlignment, setHorizontalTextPosition, setIcon, setIconTextGap, setLabelFor, setText, setUI, setVerticalAlignment, setVerticalTextPosition 

這麼多東西,那麼這個DefaultTableCellRenderer 類的作用可是大了,隻要你知道JLable的一些功能,那麼這個類也就可以實現,比如:
JLable.setHorizontalTextPosition()(int textPosition)這個方法可以實現對齊方式,那麼我們的DefaultTableCellRenderer 也可以實現對齊方式
例如:
我們寫一個類繼承DefaultTableCellRenderer:
public class MyRenderer extends DefaultTableCellRenderer   {  
                  public   myRenderer (){  
                          super();  
                          setHorizentalAlignment(javax.swing.SwingConstants.RIGHT);  
                  }    
         
  }   

使用:
JTable jTable=new JTable();
MyRenderer myRenderer=new MyRenderer();
jTable.setDefaultRenderer(Object.class,myRenderer);
這樣就實現所有的右對齊

DefaultTableCellRenderer 還有一個比較重要的應用就是:
 void setBackground(Color c) 
 void setForeground(Color c) 
這兩個方法,實現顏色改變:
 public class MyRenderer extends DefaultTableCellRenderer
 { 
 public Component getTableCellRendererComponent(JTable table,
                                Object value,
                                boolean isSelected,
                                boolean hasFocus,
                                int row,
                                int column)
      {
         setText(value.toString());

         if (((Integer)table.getValueAt(row, 3)).intValue() < 1)
         {
            setBackground(Color.GRAY);
            setForeground(Color.WHITE);
         }
         else
         {
            if (isSelected)
            {
                setBackground(Color.GREEN);
                setForeground(Color.BLACK);
            } 
            else
            {
                setBackground(Color.WHITE);
                setForeground(Color.BLACK);
            }
         }
         return this;    
   
      }
   }
使用:
JTable jTable=new JTable();
MyRenderer myRenderer=new MyRenderer();
jTable.setDefaultRenderer(Object.class,myRenderer);

通過上邊的兩個分析+使用,我想可能對這方面的使用比較了解,可以自己在這個類DefaultTableCellRenderer發展其它的功能

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()