【发布时间】:2015-08-13 16:18:44
【问题描述】:
我一直在尝试学习 JTable 渲染器,并且几乎确定了我正在寻找的行为,除了最后一部分。我想删除 JTable 默认为布尔值呈现的复选框,并改为呈现一个简单的字符串,但我无法在这里解决我的问题。
由于我对渲染器的更改非常小(只有基本的字符串操作,加上布尔值的前景色),我想扩展 DefaultTableCellRenderer 而不是实现 TableCellRenderer 并从头开始。 我也一直在为所有单元格类型使用相同的渲染器,因为为我的每个简单操作创建一个新类似乎很愚蠢。这是我的相关代码:
public class MyTableRenderer extends DefaultTableCellRenderer {
public MyTableRenderer() {
super();
}
@Override
public void setValue(Object value) {
if(value instanceof Boolean) {
boolean v = (boolean) value;
setForeground( v ? Color.GREEN : Color.RED );
setText( v ? "Alive" : "Dead" );
}
/* else if(value instanceof //Other types, and so on and so forth */
}
}
我正在将渲染器应用到表格中:
JTable myTable = new JTable(myTableModel);
myTable.setDefaultRenderer(Object.class, new MyTableRenderer());
我已确保我的表格模型正确响应getColumnClass(),并且我的渲染器的行为与所有其他类型的value 一样,只有布尔值起作用。无论我setText 是什么,如果出现布尔值,我的文本都会被默认复选框替换。 我了解布尔值默认使用单独的渲染器,但不应调用 setDefaultRenderer on Object.class 覆盖默认值 @ 987654330@?
【问题讨论】:
标签: java swing jtable boolean tablecellrenderer