Java 单元格编辑和;物质“;L&;JTable中的F

Java 单元格编辑和;物质“;L&;JTable中的F,java,swing,jtable,look-and-feel,Java,Swing,Jtable,Look And Feel,这是一个二重奏的问题,我认为这是更好的 一起回答 1) 如何使整个JTable不可编辑?(除了推杆还有别的方法吗 将其转换为循环并使用isCellEditable方法?) 2) 现在是更棘手的问题;我正在使用一个DefaultTableCellRenderer(),我已经覆盖了它,以便更改一些东西,如字体等。问题是我在我的应用程序中也使用了substance L&F,如果我使用:table.setDefaultRenderer(Object.class,renderer)然后我得到了我的新字体,

这是一个二重奏的问题,我认为这是更好的 一起回答

1) 如何使整个JTable不可编辑?(除了推杆还有别的方法吗 将其转换为循环并使用isCellEditable方法?)

2) 现在是更棘手的问题;我正在使用一个DefaultTableCellRenderer(),我已经覆盖了它,以便更改一些东西,如字体等。问题是我在我的应用程序中也使用了substance L&F,如果我使用:

table.setDefaultRenderer(Object.class,renderer)

然后我得到了我的新字体,但L&F将消失在整个JTable中

坦率地说,我是在追求着色效果的物质皮肤的每一个其他行,我不想失去它,但在同一时间,我也想使用我的“扩展渲染器”

有什么想法吗? 提前感谢您(1),只需让您的TableModel始终从方法返回false即可。如果您只是使用DefaultTableModel的普通实例,请扩展它以覆盖此方法

对于2),您可以在LookAndFeel UIDefaults中更改JTable字体。UIDefaults类包含许多字体、颜色、间距和其他外观设置。

有点晚,但是

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中扩展单个方法并不是一个大问题,我不能说我理解您为什么不想这样做。此外,一般来说,组件不应该负责决定可编辑性。在一个JTable上设置可编辑(true)意味着什么?JTable有一个表模型,可以从RSS提要中获取数据?您不能编辑提要,只有模型知道它。内存中的文档始终是可编辑的,因此它适用于JTextComponent及其子类(JTextArea、JTextPane、JEditorPane、JTextField)

2) 扩展SubstanceDefaultTableCellRenderer而不是扩展DefaultTableCellRenderer。这应该能奏效。也就是说,Substance希望您从GetTableCellRenderer组件返回SubstanceDefaultTableCellRenderer的子类。如果只更改字体和字体颜色,这应该没有问题。只需扩展SubstanceDefaultTableCellRenderer并覆盖GetTableCellRenderer组件,使其看起来像


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;
    }
}

这是具体的物质,我不能说我很喜欢它。这给我带来了一些麻烦,因为我有很多自定义渲染器,我非常希望不依赖于实质内容。

您能更具体一点吗。。?(对于他们两人)@Konos5,我添加了更多细节,包括指向API isCellEditable方法的链接。感谢您的快速回复!对于1)我使用的是isCellEditable的普通实例,不想扩展整个类只是为了将返回值从true更改为false…我很惊讶没有一个方法可以处理这样一个简单的问题…2)您介意给我关于如何使用它的精确说明吗??(我知道我问汤匙喂食,但我现在很困惑…)@Konos5:在这个主题上是一个很好的资源。我读了这篇文章,但仍然不确定如何使用UIManager默认值。问题是,如果我扩展customTableCellRenderer,并因此设置我想要的字体和对齐方式,我将失去实质性的外观和感觉,反之亦然!有没有办法强制L&F成为一个组件?桌子让我很不舒服。。!