簡體   English   中英

為Nimbus外觀設計簡單的單元渲染器

[英]Designing simple cell renderer for Nimbus look and feel

我有一個簡單的單元格渲染器,它由幾個JLabel組成(渲染器本身擴展了JPanel ),我試圖讓它在Nimbus的外觀和感覺中合理地渲染。 基本上發生的事情是在較輕的行中(因為Nimbus具有交替的行着色 ),我的特定單元格渲染器使用表格背景顏色(比淺色和深色顏色深得多)。 在我的渲染器中,我做了:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

如果我將整個代碼塊注釋掉,那么我的所有行都是深色 (不是表格背景,也不是替代顏色)。 我不確定我甚至不明白會發生什么! 上面的代碼片段如何產生具有不同背景顏色的單元格? table.getBackground顏色是否在我方法的調用之間變化?

我嘗試過使用這段代碼:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

這是在DefaultTableCellRenderer類中。 它似乎沒有任何影響。 有沒有人使用Nimbus定制的單元格渲染器?

編輯 :如果有人感興趣,這對Scala表格單元格渲染器來說是一個問題,因為我實際上使用的是Scala,而不是Java。 下面接受的答案在Java程序中運行得很好。 這里提出單獨的問題。

你的第一段代碼如果沒問題的話。我認為你必須使用UIManager.getColor("Table.alternateRowColor")代替備用行,否則使用table.getBackground()。 對於選定的行使用table.getSelectionBackground()。 所以你的代碼可能看起來像

if (isSelected) {
    setBackground(table.getSelectionBackground());
}
else {
    if ( row % 2 == 0 ) {
       setBackground(UIManager.getColor("Table.alternateRowColor"));
    } else { 
       setBackground(table.getBackground());
    }
}

不要忘記確保面板不透明,標簽是透明的。

這是Nimbus UI默認設置的一個很好的鏈接: http//www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM