【发布时间】:2013-10-04 04:34:03
【问题描述】:
我正在尝试为我的 JTable 实现鼠标悬停效果。 (当鼠标移到表格的行上时,该行的背景会改变)。
为了做到这一点,我像这样扩展了 DefaultTableCellRenderer:
public class FileTableCellRenderer extends DefaultTableCellRenderer{
public FileTableCellRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
FileTable fileTable = (FileTable)table;
Component c = super.getTableCellRendererComponent(fileTable, value, isSelected, hasFocus, row, column);
if(!isSelected){
if(row == fileTable.getCursorRow())
{
c.setBackground(Color.pink);
c.setForeground(Color.darkGray);
}
else
{
c.setBackground(Color.white);
c.setForeground(Color.darkGray);
}
}
this.setText(value.toString());
return this;
}
}
我设置了 JTable 的 defaultRenderer,它可以工作。问题是我有一列是布尔值。在我设置我的渲染器之前,我有这个可爱的复选框作为它的默认渲染器。
现在,它只显示“真”或“假”。
另一方面,如果我为布尔列保留默认的 BooleanRenderer,它将不会以整行突出显示...
我也尝试扩展 JTable.BooleanRenderer,但它似乎受到保护,所以我什至无法扩展它。
我怎样才能离开 BooleanRenderer 的这个复选框,但改变行的其余部分的背景颜色?
【问题讨论】:
-
设置您自己的渲染器,并制作您想要的......或者您可以通过组合 BooleanCellRenderer,首先调用 BooleanCellRenderer#getTableCellRendererComponent 然后使用您的实现......
-
请解释为什么需要 reson(不知道并且可能有问题)BooleanRenderer,也许我找不到任何理由,或者我错了......
-
它不会用整行突出显示... == 使用 prepareRenderer
标签: java swing jtable tablecellrenderer