2011-03-16 49 views
4

SwingX組件有點問題。SwingX JXTable布爾列在高亮顯示時顏色不同

在我的應用程序中,我使用JXTable並在桌面上註冊了一個MouseOver ColorHighlighter。該表的模型定義了兩列;一個String列和一個布爾列。 JXTable中布爾列的默認渲染器是CheckBoxes。現在的問題是當鼠標在行上移動時,ColorHighlighter以不同顏色突出顯示列;布爾列較黑,然後是字符串列。 在示例中,您可以看到該行爲。

我希望所有列都以相同顏色突出顯示。

有沒有人有想法解決這個問題?



import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.table.DefaultTableModel; 

import org.jdesktop.swingx.JXTable; 
import org.jdesktop.swingx.decorator.ColorHighlighter; 
import org.jdesktop.swingx.decorator.HighlightPredicate; 


public class BooleanHighlighterDemo 
{ 
    public static void main(String args[]) 
    { 
    JFrame frame = new JFrame("Boolean Highlighter"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JXTable table = new JXTable(new BooleanTableModel()); 

    //Add ColorHighlighter 
    table.addHighlighter(new ColorHighlighter(HighlightPredicate.ROLLOVER_ROW, 
     new Color(0x330000ff, true), Color.BLACK)); 

    frame.add(new JScrollPane(table), BorderLayout.CENTER); 
    frame.setSize(400, 150); 
    frame.setVisible(true); 
    } 
} 

class BooleanTableModel extends DefaultTableModel 
{ 
    public BooleanTableModel() 
    { 
    super(new Object[][]{ { "1", Boolean.TRUE }, { "2", Boolean.TRUE }, { "3", Boolean.FALSE }, 
     { "4", Boolean.TRUE }, { "5", Boolean.FALSE } }, new String[]{ "Number", "Boolean" }); 
    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) 
    { 
    switch (columnIndex) 
    { 
     case 0: 
     return String.class; 

     case 1: 
     return Boolean.class; 

     default : 
     return Object.class; 
    } 
    } 
} 

+0

我跑你的例子,我得到了兩列相同的顏色。 – jzd 2011-03-16 11:35:09

+0

在評論之後,我查看了swingX 1.6.2的最新版本,在這個版本中,兩列的顏色都是一樣的。看來Bug已經修復了。謝謝 ! – Seffel 2011-03-16 14:08:34

+0

我應該提到我使用了1.6.2,我將創建一個指定這個的答案。 – jzd 2011-03-16 14:13:21

回答

1

以最新版本(SwingX 1.6.2)運行程序。而且你應該看到兩列的顏色相同。

1

如果去掉字母,高亮顏色是兩列相同。