我遇到的问题是,当我选择一行时,带有自定义单元格渲染器的单元格不会突出显示该单元格,而是执行其他单元格。
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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:2)
格式化数据的最简单方法是覆盖默认渲染器的setValue(...)
方法,如Using Custom Renderers上的Swing教程中所示。然后你不必担心突出显示。
或者更简单的是使用Table Format Renderer,然后您需要提供的只是渲染器使用的Format
。