【发布时间】:2014-10-30 00:57:18
【问题描述】:
我正在使用以下代码在 jTable 中设置备用背景行颜色:
table = new JTable(model);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
c.setBackground(row % 2 == 0 ? Color.white : Color.lightGray);
return c;
};
});
而且它有效。 但是我想使用自定义颜色说 rgb (242,242,242) 代替 lightGray 作为备用颜色,但是这样做时:
final Color alternateColor = new Color (242,242,242);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
c.setBackground(row % 2 == 0 ? Color.white : alternateColor);
return c;
};
});
替代颜色被完全忽略,所有行都有白色背景。看起来此方法仅适用于属于 Color 枚举的颜色。怎么来的?
这是一个完整的工作示例,后面是生成的屏幕:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test extends JFrame
{
private JTable table = null;
private Object[] columnTitle = { "Column1", "Column2", "Column3" };
private Object[][] data = null;
private DefaultTableModel model = null;
private JPanel panel = null;
private JScrollPane scroller = null;
public Test()
{
super();
setLayout(new BorderLayout());
panel = new JPanel();
scroller=new JScrollPane();
data = new Object[3][3];
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
data [i][j]="Test";
}
}
model = new DefaultTableModel(data, columnTitle);
table = new JTable(model);
final Color alternateColor=new Color(242,242,242);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if ( !isSelected )
c.setBackground(row % 2 == 0 ? Color.white : alternateColor);
return c;
};
});
scroller.setViewportView(table);
panel.add(scroller);
this.add(panel, BorderLayout.CENTER);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Test test = new Test();
test.setLocationRelativeTo(null);
test.pack();
test.setVisible(true);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
这是带有 Color.lightGray 的屏幕:
【问题讨论】:
-
不,对我来说很好用。考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
-
好吧,如果它适合你,它可能与我使用的 LAF 有关,即 Weblaf。我没有看到任何其他可能的原因......
-
但是第一个示例适用于 weblaf?
-
是的,带有“Color.lightGray”的那个可以正常工作。