默认情况下,空值在JTable中呈现为空字符串。我希望有一个默认的渲染器显示";NULL";当呈现null值时,但仅用于String类。以下代码适用于Object类,也适用于为特定列设置渲染器的情况,但如果为String类设置渲染器,则会失败。有什么想法可以实现吗?
import javax.swing.*;
import javax.swing.table.*;
public class RenderingNull extends JFrame {
public RenderingNull() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(150, 150);
setLocationRelativeTo(null);
String headers[] = {"Fruit", "Colour"};
Object data[][] = {
{"Tomato", "Red"},
{"Banana", "Yellow"},
{"Orange", null},
{null, "Green"}
};
TableModel model = new DefaultTableModel(data, headers);
JTable table= new JTable(model);
TableCellRenderer renderer= new NullRenderer();
// table.setDefaultRenderer(Object.class, renderer);
// table.getColumn("Fruit").setCellRenderer(renderer);
// table.getColumn("Colour").setCellRenderer(renderer);
table.setDefaultRenderer(String.class, renderer);
JScrollPane scrollPane= new JScrollPane(table);
add(scrollPane);
setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(RenderingNull::new);
}
class NullRenderer extends DefaultTableCellRenderer {
@Override
public void setValue(Object value) {
setText(value==null ? "NULL" : value.toString());
}
}
}
,但如果为String类设置,则会失败。
默认情况下,JTable
和DefaultTableModel
的getColumnClass(...)
方法返回Object.class
。
该表根据此方法返回的值确定渲染器(和编辑器(。
因此,默认情况下,您只能在列级别或Object.class级别提供自定义渲染(正如您所注意到的(。
如果要对String.class进行特殊渲染,则需要重写上面列出的任何一个类中的getColumnClass(...)
方法以返回String.class
。
有关简单示例,请参阅:在专用DefaultTableModel中引用。