mer*_*dra 4 swing jtable jpasswordfield
我正在 JTable 中创建一个密码列。
我可以使用以下代码将单元格编辑器更改为密码编辑器:
JPasswordField pwf = new JPasswordField();
DefaultCellEditor editor = new DefaultCellEditor(pwf);
jTable1.getColumnModel().getColumn(3).setCellEditor(editor);
Run Code Online (Sandbox Code Playgroud)
我无法找出正确的解决方案来使用与 JPassword 控件相同的行为来渲染密码字段内容。默认情况下,它渲染输入的文本并显示它。如何覆盖它,以便渲染器仅渲染显示与输入的密码长度相同的“*”或黑点。
谢谢,钱德拉
更新 1:目前我正在使用下面给出的密码字段渲染器:
class PasswordCellRenderer extends JPasswordField
implements TableCellRenderer {
public PasswordCellRenderer() {
super();
// This displays astericks in fields since it is a password.
// It does not affect the actual value of the cell.
this.setText("filler123");
}
public Component getTableCellRendererComponent(
JTable arg0,
Object arg1,
boolean arg2,
boolean arg3,
int arg4,
int arg5) {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令调用上面的渲染器:
jTableJDBCPools.getColumnModel().getColumn(3).setCellRenderer(new PasswordCellRenderer());
Run Code Online (Sandbox Code Playgroud)
即使密码字段为空,此渲染器也会进行屏蔽。因此,用户很难确定密码单元格是空的还是已填充的(因为它总是显示一些隐藏的内容)。
如何编写一个渲染器,当在密码字段中未输入任何内容时保持空白,并且当在密码字段中输入内容时,它必须显示在密码字段中输入的字符的长度?
您需要使用setCellRenderer为该列设置专用单元格渲染器,该渲染器将返回密码的屏蔽版本。请参阅Oracle 教程中的更多信息。
编辑
沿着这些思路:
class PasswordCellRenderer extends DefaultTableCellRenderer {
private static final String ASTERISKS = "************************";
@Override
public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
int length =0;
if (arg1 instanceof String) {
length = ((String) arg1).length();
} else if (arg1 instanceof char[]) {
length = ((char[])arg1).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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4831 次 |
最近记录: |