【问题标题】:Cell editing and "Substance" L&F in JTableJTable 中的单元格编辑和“物质”L&F
【发布时间】:2011-07-10 01:31:55
【问题描述】:

这是我认为更好的问题二重唱 一起回答。

1) 如何使我的整个 JTable 不可编辑? (除了放有没有其他方法 它进入一个循环并使用 isCellEditable 方法?)

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

@987654321 @

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

坦率地说,我正在追求每隔一行的物质皮肤上的阴影着色效果,我不想失去它,但同时我也想使用我的“扩展渲染器”......

有什么想法吗? 提前谢谢你

【问题讨论】:

    标签: java swing jtable look-and-feel


    【解决方案1】:

    有点晚了,但是

    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。

    【讨论】:

      【解决方案2】:

      对于 1),只需让您的 TableModel 始终从 isCellEditable() 方法返回 false。如果您只是使用 DefaultTableModel 的普通实例,请对其进行扩展以覆盖此方法。

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

      【讨论】:

      • 你能说得更具体一点吗? (对于他们两个)
      • @Konos5,我添加了更多细节,包括 API isCellEditable 方法的链接。
      • 感谢您的快速回复!对于 1) 我正在使用 isCellEditable 的普通实例,并且不想扩展整个类只是为了将返回值从 true 更改为 false ...我很惊讶没有一个方法可以处理这样一个简单的问题...2)你介意给我关于如何使用它的精确说明吗?(我知道我问的是勺子喂食,但我现在很困惑......)
      • @Konos5: UIManager Defaults 是关于这个主题的优秀资源。
      • 我阅读了这篇文章,但仍然不确定如何使用 UIManager 默认值。问题是,如果我扩展 customTableCellRenderer 并因此设置我想要的字体和对齐方式,我将失去实质的外观和感觉,反之亦然!有什么办法可以强制 L&F 变成一个组件?桌子给了我一个非常艰难的时间..!
      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2019-04-30
      • 2011-09-27
      • 2010-12-07
      • 2010-12-22
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多