有点晚了,但是
1) 我假设您使用的是 DefaultTableModel?
JTable table = null;
Vector dataVector = null;
Vector columnNames = null;
table.setModel(new DefaultTableModel(dataVector, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
});
一般来说,在 Java 中扩展单个方法并不是什么大问题,我不能说我理解你为什么不想这样做。此外,一般来说,组件不应该负责决定可编辑性。在具有从 RSS 提要等获取数据的表模型的 JTable 上设置 setEditable(true) 意味着什么?您无法编辑提要,只有模型知道。不过,内存中的文档始终是可编辑的,因此它适用于 JTextComponent 及其子类(JTextArea、JTextPane、JEditorPane、JTextField)。
2) 不是扩展 DefaultTableCellRenderer,而是扩展 SubstanceDefaultTableCellRenderer。这应该够了吧。也就是说,Substance 希望您从 getTableCellRendererComponent 返回 SubstanceDefaultTableCellRenderer 的子类。如果您只更改字体和字体颜色,这应该没有问题。只需扩展 SubstanceDefaultTableCellRenderer 并覆盖 getTableCellRendererComponent 看起来像
class MyTableRenderer extends SubstanceDefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel)super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setFont(label.getFont().deriveFont(Font.BOLD, 14));
return label;
}
}
这是特定于 Substance 的,我不能说我非常喜欢它。这让我有些头疼,因为我有很多自定义渲染器,我非常不想依赖 Substance。