如何为字符串 class 创建 JTable 的 DefaultRenderer?
How to create a JTable's DefaultRenderer for the String class?
默认情况下,空值在 JTable 中呈现为空字符串。我希望有一个默认渲染器在渲染空值时显示“NULL”,但仅限于字符串 class。以下代码适用于对象 class,如果为特定列设置了渲染器,但如果为字符串 class 设置则失败。有什么想法可以实现吗?
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());
}
}
}
but fails if set for the String class.
默认 getColumnClass(...)
方法 JTable
和 DefaultTableModel
returns Object.class
.
table 根据从此方法得到的值 return 确定渲染器(和编辑器)。
因此默认情况下您只能在列级别或 Object.class 级别提供自定义呈现(如您所见)。
如果你想对 String.class 进行特殊渲染,那么你需要将上面列出的 类 中的 getColumnClass(...)
方法重写为 return String.class
.
有关简单示例,请参阅:。
默认情况下,空值在 JTable 中呈现为空字符串。我希望有一个默认渲染器在渲染空值时显示“NULL”,但仅限于字符串 class。以下代码适用于对象 class,如果为特定列设置了渲染器,但如果为字符串 class 设置则失败。有什么想法可以实现吗?
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());
}
}
}
but fails if set for the String class.
默认 getColumnClass(...)
方法 JTable
和 DefaultTableModel
returns Object.class
.
table 根据从此方法得到的值 return 确定渲染器(和编辑器)。
因此默认情况下您只能在列级别或 Object.class 级别提供自定义呈现(如您所见)。
如果你想对 String.class 进行特殊渲染,那么你需要将上面列出的 类 中的 getColumnClass(...)
方法重写为 return String.class
.
有关简单示例,请参阅: