[英]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.