2015-08-30 131 views
0

我遇到的問題是,當我選擇一行時,具有自定義單元格渲染器的單元格不會突出顯示該單元格,但會執行其他單元格。選中行時突出顯示的單元格

public Component getTableCellRendererComponent(
    JTable table, 
    Object value, 
    boolean isSelected, 
    boolean hasFocus, 
    int row, 
    int column) 
{ 
    setFont(ApplicationStyles.TABLE_FONT); 

    if (value != null) 
    { 
     BigDecimal decimalValue = toBigDecimal(value); 
     decimalValue = 
      decimalValue.setScale(2, BigDecimal.ROUND_HALF_EVEN); 

     DecimalFormat formatter = new DecimalFormat("$##,##0.00"); 
     formatter.setMinimumFractionDigits(2); 
     formatter.setMinimumFractionDigits(2); 
     String formattedValue = formatter.format(value); 
     setText(formattedValue); 
    } 
    return this; 
} 

回答

2

來格式化數據的最簡單的方法是重寫的默認渲染的setValue(...)方法如在Swing教程中演示上Using Custom Renderers。那麼你不必擔心突出顯示。

或者可能更容易的是使用Table Format Renderer,那麼您需要提供的是要由渲染器使用的Format

+0

setValue(Object value)使格式變得如此簡單....謝謝 – Grim

4

renderer應該檢查isSelected,並相應調節的Component顏色。概括地說,

@Override 
public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected, 
    boolean hasFocus, int row, int col) { 
    … 
    if (isSelected) { 
     setForeground(getSelectionForeground()); 
     setBackground(getSelectionBackground()); 
    } else { 
     setForeground(getForeground()); 
     setBackground(getBackground()); 
    } 
    return this; 
} 
+0

另請參閱本文討論'DefaultTableCellRenderer'的[問與答](http://stackoverflow.com/q/9607670/230513)。 – trashgod

+0

另外,如果操作使用DefaultTableCellRenderer,只需調用超級方法,但由於操作未提供此信息,這是最好的解決方案 – MadProgrammer

+0

我沒有使用DefaultTableCellRenderer,但實現TableCellRenderer – Grim

相關問題