我正在阅读以下部分:
所以我决定编写自己的自定义渲染器:
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
时。
答案 0 :(得分:-1)
经过多次试错,这是我到目前为止找到的唯一解决方案:
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);
}
}
由于在完成编辑后背景显示为白色而不是蓝色,因此这并不完美。但这比编辑后文本不会出现的原始行为更好。