簡體   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