繁体   English   中英

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

[英]Cell editing and “Substance” L&F in JTable

这是我认为最好一起回答的问题。

1)如何使我的整个JTable无法编辑? (除了将其放入循环并使用isCellEditable方法之外,还有其他方法吗?)

2)现在比较棘手; 我使用的是DefaultTableCellRenderer(),为了更改字体等几项内容,已对其进行了覆盖。问题是,我在应用程序中也使用了L&F物质,如果使用的话:

table.setDefaultRenderer(Object.class, renderer);

然后我得到了新字体,但是L&F对于整个JTable来说都消失了。

坦率地说,我希望在物质皮肤的每一行上都获得阴影着色效果,但我不想丢失它,但同时我也想使用我的“扩展渲染器” ...

有任何想法吗? 先感谢您

对于1),只需让您的TableModel始终从isCellEditable()方法返回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上对setEditable(true)表示什么意思,该表模型可以从RSS提要中获取数据? 您不能编辑提要,只有模型知道它。 内存中的文档始终是可编辑的,因此它适用于JTextComponent及其子类(JTextArea,JTextPane,JEditorPane,JTextField)。

2)扩展SubstanceDefaultTableCellRenderer,而不是扩展DefaultTableCellRenderer。 这应该够了吧。 也就是说,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的自定义渲染器,这让我头疼不已。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM