2010-11-23 36 views
2

我很好奇做錯了什麼。我的猜測是組件,但這是問題。 這是我的單元格渲染器:使用單元格渲染器後,行選擇功能被禁用

public class WildcardCellRenderer implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) { 

     JTextField c = new JTextField(); 
     c.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

     if(vColIndex == 2){ 
      if((Integer)value == 0) c.setText("No") ; 
      else c.setText("Si"); 
     } else c.setText(value.toString()); 

     return c; 
    } 

} 

,這是我如何設置的事情在我的面板:

this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer()); 

的問題是,當我設置此渲染行變成不可選擇。我應該使用不同的組件來顯示我需要顯示的內容嗎?基本上,我將0/1值顯示爲No/Yes值。

回答

4

你需要採取「isSelected」價值考慮在內,並相應地設置了背景色是這樣的:

if (isSelected) { 
     c.setBackground(table.getSelectionBackground()); 
     c.setForeground(table.getSelectionForeground()); 
    } 
    else { 
     c.setBackground(table.getBackground()); 
     c.setForeground(table.getForeground()); 
    } 

我把這個從我ListCellRenderers之一,但我認爲它的工作原理與TableCellRenderers相同。

哦,順便說一句,您可以重複使用文本字段,不需要爲每個單元格創建一個新的文本字段,因此您可以使文本字段成爲類的成員,並且在方法內部只需更改文本中的某些內容像內容/顏色的字段並將其返回。這樣你就不會在一張大桌子上出現一百萬個文本字段實例。

+0

謝謝朋友。就是這樣。我沒有從教程中得到你需要重新定義一切。 – dierre 2010-11-23 09:38:39

相關問題