С опозданием, но
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, и я могуНе понимаю, почему ты не хочешь этого делать.Более того, в целом, компонент не должен отвечать за решение о редактируемости.Что бы это значило для setEditable (true) для JTable с табличной моделью, которая выбирает данные, скажем, из RSS-канала?Вы не можете редактировать канал, и только модель знает это.Документ в памяти всегда доступен для редактирования, поэтому он работает для JTextComponent и его подклассов (JTextArea, JTextPane, JEditorPane, JTextField).
2) Вместо расширения DefaultTableCellRenderer, расширьте SubstanceDefaultTableCellRendRec.Это должно делать свое дело.То есть Substance хочет, чтобы вы возвращали подкласс SubstanceDefaultTableCellRenderer из getTableCellRendererComponent.Это не должно быть проблемой, если вы меняете только шрифт и цвет шрифта.Просто расширьте 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;
}
}
Это зависит от вещества, и я не могу сказать, что мне это очень нравится.Это вызвало у меня несколько головных болей, так как у меня много пользовательских средств визуализации, которые я бы очень хотел не зависеть от Вещества.