变回默认的背景色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