最近我在JTable中的一个列有一个小问题:因为我编辑了它的DefaultTableCellRenderer,当我在表中聚焦一行时,密码列没有聚焦。 Here's a screenshot我的代码:
inputsTable.getColumn("Passwort").setCellRenderer(new DefaultTableCellRenderer(){
private final String ASTERISKS = "*";
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
int length =0;
if (value instanceof String) {
length = ((String) value).length();
} else if (value instanceof char[]) {
length = ((char[])value).length;
}
setText(asterisks(length));
return this;
}
private String asterisks(int length) {
if (length > ASTERISKS.length()) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append('*');
}
return sb.toString();
} else {
return ASTERISKS.substring(0, length);
}
}
});
我已经尝试了一些不同的选择,但不幸的是,他们没有帮助我。你们中的任何人最终都有线索,是否有一些更好的JTable密码列实现没有这个问题?提前谢谢!
答案 0 :(得分:2)
发布的DefaultTableCellRenderer
实现根据当前状态(特别是isSelected
参数)设置无格式。要保留默认格式,请考虑在自定义之前调用父方法。
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
//do your customization here
}