这让我绝对疯了。
我知道,要使用JTable更改表格单元格的格式,我必须使用自己的渲染器。但我似乎无法正确实现这一点。
这是我目前的设置:
public class MyClass
{
public static void main(String args[])
{
JTable myTable = new JTable(10, 10);
myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer());
}
}
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// Formatting
return c;
}
}
我需要为setDefaultRenderer
的第一个参数使用什么? API只是说'class'。我不知道该放什么。
有人可以用最简单的术语解释我如何实现这个目标吗?请提供一个示例,说明如何在main()
方法中更改格式。
答案 0 :(得分:13)
在setDefaultRenderer
的第一个参数中,为要覆盖渲染的类添加类文字。即,如果您的数据包含所有字符串,则可以输入
myTable.setDefaultRenderer(String.class, new CustomRenderer());
如果您的数据也包含BigDecimal
或Integer
作为类的值,则必须为每种类类型(BigDecimal.class
或Integer.class
多次调用该方法每个案例)。
最后,要更改背景颜色,请在渲染器中执行此操作:
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
}
如果你编写了一个适用于界面的所有类的渲染器,你还需要修改表模型的getColumnClass
功能,让它返回实现此接口的所有对象的接口类:
public Class<? extends Object> getColumnClass(int c) {
Object object = getValueAt(0, c);
if(object == null) {
return Object.class;
if(getValueAt(0, c) instanceof IColorable) {
return ICarPart.class;
} else {
return getValueAt(0, c).getClass();
}
}
使用它可以为IColorable.class注册渲染器,并且不需要为每个实现注册单独的渲染器。