不錯的渲染例子

表單元格渲染器的使用

使用表格渲染器渲染表格

在使用JTable時,用戶往往希望改變它缺省的渲染方式,比如使用間隔色的行,對特定的單元格進行特殊顏色顯示等,這對一些可視化編程環境的表格並不是一件容易的事。
在Java Swing編程中我們可以使用DefaultTableCellRenderer的子類渲染表格來達到這個目的,實現和使用它都非常容易。

渲染效果一:


步驟一:實現一個javax.swing.table.DefaultTableCellRenderer的子類

/**
* 間隔色表格渲染類
*/
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -3378036327580475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到單元格
               Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);
               // 進行渲染
               if (hasFocus) {
                 // 如果獲得焦點則設置背景色爲紅色
                   cell.setBackground(Color.red);
                   //cell.setForeground(Color.black);
               } else {
                   if ((row % 2) == 0) {
                     // 偶數行設置爲白色
                       cell.setBackground(Color.white);
                   } else {
                     // 奇數行設置爲藍色
                       cell.setBackground(Color.cyan);
                   }
               }
              
               return cell;
       }
}

步驟二:將ColorTableCellRenderer設置爲表格的渲染器

 try {
 ColorTableCellRenderer cellRender = new ColorTableCellRenderer();
 table.setDefaultRenderer(Class.forName("java.lang.Object"),
  cellRender);
} catch (Exception e) {
 e.printStackTrace();
}

實現一個將特定單元格設置爲紅色的表格渲染器

如右,如果想將成員年齡大於37的單元格設置爲紅色。

AgeTableCellRenderer的代碼

public class AgeTableCellRenderer extends DefaultTableCellRenderer {
  private static final long serialVersionUID = -334535475639L;

  public Component getTableCellRendererComponent(
               JTable table,
               Object value,
               boolean isSelected,
               boolean hasFocus,
               int row,
               int column) {
   
               // 得到單元格
               Component cell =
                       super.getTableCellRendererComponent(
                               table,
                               value,
                               isSelected,
                               hasFocus,
                               row,
                               column);

               // 先把所有單元格設置爲白色
               cell.setBackground(Color.white);
              
               // 進行渲染
               if (table.getColumnName(column).equals("年齡") ) { // 如果列名等於“年齡”
                 // 取得單元格的文字
                 String strValue=(String)value;
                
                 if(Pattern.matches("//d+", strValue)){
                   if(Integer.parseInt(strValue)>37){
                     // 如果是數字且值大於37,將單元格背景設置爲紅色
                     cell.setBackground(Color.red);
                   }                  
                 }
               }
              
               return cell;
       }
}

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