刷新 jtable 中一行的背景颜色
我正在尝试设置 Swing Jtable 的行颜色。 我按照网上的建议使用此类来扩展 Jtable。
public class ColorTable extends JTable {
private static final long serialVersionUID = 1L;
private Map rowColor = new HashMap();
private Map columnColor = new HashMap();
private Color cellColor;
private Color defaultColor;
public ColorTable( TableModel model ) {
super( model );
}
public void setRowColor( int row, Color c) {
rowColor.put( new Integer( row ), c );
}
public void setColumnColor( int column, Color c ) {
columnColor.put( new Integer( column ), c );
}
public void setCellColor( Color c ) {
cellColor = c;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public Component prepareRenderer( TableCellRenderer renderer, int row, int column ) {
Component c = super.prepareRenderer( renderer, row, column );
if ( defaultColor == null )
defaultColor = c.getBackground();
// Color order is as follows:
// rowSelection, checkBox toggle for row color, column color, cell color
if ( ! isRowSelected( row ) ) {
Color color = (Color) rowColor.get( new Integer( row ) );
if ( color == null || Boolean.FALSE.equals( getModel().getValueAt( row, 0 ) ) )
color = (Color) columnColor.get( new Integer( column ) );
if ( color == null ) {
// cell color only if cell has special value, for example purposes,
// if the cell value begins with a 2
Object value = getValueAt( row, column );
if ( value != null && value.toString().startsWith( "2" ) )
color = cellColor;
}
if ( color != null )
c.setBackground( color );
else
c.setBackground( defaultColor );
}
return c;
}
public void resetColor(Color color) {
for(int i=0;i<this.getRowCount();i++)
this.setRowColor(i, color);
}
}
我只是添加了方法 resetColor(Color color) 以便用相同的颜色初始化所有行。
它在第一次使用时似乎可以工作,但是当我想改变颜色时我遇到了问题。例如,如果我在按钮操作监听器中执行以下代码,我会在第一次迭代时正确地为表格着色,并且在永远不会更改背景之后。
deployTable.resetColor(Color.green);
// set red background to the
for (Integer x : indexes) {
System.out.println("index "+x+" red!");
deployTable.setRowColor(x, Color.red);
}
deployTable.revalidate();
有人知道它会是什么吗?
谢谢, 斯特
i am trying to set the color of row of a Swing Jtable.
i use this class to extend Jtable as suggest on the net.
public class ColorTable extends JTable {
private static final long serialVersionUID = 1L;
private Map rowColor = new HashMap();
private Map columnColor = new HashMap();
private Color cellColor;
private Color defaultColor;
public ColorTable( TableModel model ) {
super( model );
}
public void setRowColor( int row, Color c) {
rowColor.put( new Integer( row ), c );
}
public void setColumnColor( int column, Color c ) {
columnColor.put( new Integer( column ), c );
}
public void setCellColor( Color c ) {
cellColor = c;
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public Component prepareRenderer( TableCellRenderer renderer, int row, int column ) {
Component c = super.prepareRenderer( renderer, row, column );
if ( defaultColor == null )
defaultColor = c.getBackground();
// Color order is as follows:
// rowSelection, checkBox toggle for row color, column color, cell color
if ( ! isRowSelected( row ) ) {
Color color = (Color) rowColor.get( new Integer( row ) );
if ( color == null || Boolean.FALSE.equals( getModel().getValueAt( row, 0 ) ) )
color = (Color) columnColor.get( new Integer( column ) );
if ( color == null ) {
// cell color only if cell has special value, for example purposes,
// if the cell value begins with a 2
Object value = getValueAt( row, column );
if ( value != null && value.toString().startsWith( "2" ) )
color = cellColor;
}
if ( color != null )
c.setBackground( color );
else
c.setBackground( defaultColor );
}
return c;
}
public void resetColor(Color color) {
for(int i=0;i<this.getRowCount();i++)
this.setRowColor(i, color);
}
}
I simply added the method resetColor(Color color) in order to initialize all the row with the same color.
It seams to work at first use but when i want to change the colors i get problems. for instance if I execute the sollowing code within a button action listener i color the table properly just at the first iteration and after never changes the background.
deployTable.resetColor(Color.green);
// set red background to the
for (Integer x : indexes) {
System.out.println("index "+x+" red!");
deployTable.setRowColor(x, Color.red);
}
deployTable.revalidate();
does anyone has any idea about what could it be??
Thanks,
Ste
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
例如,
for example,
听起来我自己正在回答我的一个问题。但我发现了另一个快速修复我的错误的方法。但我不太确定原因。我在验证之前调用了 epaint,一切正常:
我想我还没有真正弄清楚重绘和重新验证之间的区别。谁能给我解释一下吗?
It may sound wired myself answering to one of my questions. but I found another quck fix to my bug. but am not really sure about the reason. I call a epaint just before the validate and everything works fine:
I think i have not really clear the difference within repaint and revalidate. Can anyone explain it to me?