如何为 String 类创建 JTable 的 DefaultRenderer?



默认情况下,空值在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类设置,则会失败。

默认情况下,JTableDefaultTableModelgetColumnClass(...)方法返回Object.class

该表根据此方法返回的值确定渲染器(和编辑器(。

因此,默认情况下,您只能在列级别或Object.class级别提供自定义渲染(正如您所注意到的(。

如果要对String.class进行特殊渲染,则需要重写上面列出的任何一个类中的getColumnClass(...)方法以返回String.class

有关简单示例,请参阅:在专用DefaultTableModel中引用。

最新更新