我很谨慎做错事。我的猜测是组件,但这是问题所在。 这是我的单元格渲染器:
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值。
答案 0 :(得分:4)
您需要考虑“isSelected”值并相应地设置背景颜色,如下所示:
if (isSelected) {
c.setBackground(table.getSelectionBackground());
c.setForeground(table.getSelectionForeground());
}
else {
c.setBackground(table.getBackground());
c.setForeground(table.getForeground());
}
我从我的一个ListCellRenderers中获取了这个,但我认为它与TableCellRenderers一样。
哦,顺便说一下,你可以重复使用文本字段,不需要为每个单元格创建一个新的文本字段,这样你就可以使文本字段成为你的类的一个成员,并且在方法内部只需更改文本字段中的内容喜欢内容/颜色并返回它。这样你就不会在一张大桌子上结束一百万个文本字段实例。