SwingX JXTable布尔列在突出显示时具有不同的颜色

时间:2011-03-16 10:04:17

标签: java swing swingx

我对SwingX组件有一点问题。

在我的应用程序中,我使用的是JXTable,在桌面上我注册了一个MouseOver ColorHighlighter。该表的模型定义了两列; String列和Boolean列。 JXTable中布尔列的默认渲染器是CheckBoxes。现在问题是当鼠标在行上移动时,ColorHighlighter以不同颜色突出显示列;布尔列比String列更暗。 在示例中,您可以看到行为。

我希望所有列都以相同的颜色突出显示。

有人有想法解决问题吗?



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;
    }
  }
}

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; } } }

2 个答案:

答案 0 :(得分:1)

如果删除alpha,则两列的突出显示颜色相同。

答案 1 :(得分:1)

运行最新版本的程序(SwingX 1.6.2)。你应该看到两列的颜色相同。