选择行时突出显示单元格
Highlight cell when row is selected
我遇到的问题是,当我 select 一行时,带有自定义单元格渲染器的单元格不会突出显示该单元格,但会突出显示其他单元格。
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;
}
您 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;
}
格式化数据的最简单方法是覆盖默认渲染器的 setValue(...)
方法,如 Using Custom Renderers 上的 Swing 教程中所示。那你就不用担心高亮了。
或者使用 Table Format Renderer 可能更简单,那么您只需提供渲染器使用的 Format
。
我遇到的问题是,当我 select 一行时,带有自定义单元格渲染器的单元格不会突出显示该单元格,但会突出显示其他单元格。
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;
}
您 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;
}
格式化数据的最简单方法是覆盖默认渲染器的 setValue(...)
方法,如 Using Custom Renderers 上的 Swing 教程中所示。那你就不用担心高亮了。
或者使用 Table Format Renderer 可能更简单,那么您只需提供渲染器使用的 Format
。