变回默认的背景色DefaultTableCellRenderer

我读了以下部分:变回默认的背景色DefaultTableCellRenderer

  • How to Use Tables - Using Custom Renderers

所以我决定写我自己的自定义渲染:

public class MyRenderer extends DefaultTableCellRenderer { 

@Override

protected void setValue(Object value) {

try {

String text = MyFormatter.format(value);

//setBackground(Color.white); // my text becomes invisible

//setBackground(null); // my text becomes invisible

setBackground(???);

setText(text);

} catch (IllegalArgumentException e) {

// Something is not quite right, indicate the error to the user:

setBackground(Color.red); // at this point in time getBackground() returns Color.blue

super.setValue(value);

}

}

}

我了解如何更改背景颜色以指示格式中出现错误的字段。在用户手动编辑后,我希望该字段恢复为原始背景颜色。但到目前为止,我还没有明白如何去做。在这种情况下,我可以使用DefaultTableCellRenderer吗?我应该改用TableCellRenderer .getTableCellRendererComponent吗?

我能得到的东西,以显示与:

  [...] 

String text = MyFormatter.format(value);

setBackground(null);

setForeground(null); // need both to null

setText(text);

但这种选择行下破坏影像逆模式......


更新:我不能使用getBackground()和存储在编辑背景色时,私人会员中的颜色值为Color.blue

回答:

经过大量试验和错误的,这里是我迄今发现的唯一解决方案:

protected void setValue(Object value) { 

try {

String text = MyFormatter.format(value);

if (errorState) {

updateUI(); // call setBackground(null) and properly repaint()

errorState = false;

}

setText(text);

} catch (IllegalArgumentException e) {

// store error state:

errorState = true;

// Something is not quite right, indicate the error to the user:

setBackground(Color.red);

super.setValue(value);

}

}

这是不完美的,因为编辑后的背景显示的蓝色白色代替完成。但是,这比编辑完成后文本不会出现的原始行为要好。

以上是 变回默认的背景色DefaultTableCellRenderer 的全部内容, 来源链接: utcz.com/qa/266428.html

回到顶部