java - 按下按钮时在 jtable 列中显示和隐藏密码字符

标签 java swing jtable

我试图在按下按钮时隐藏和显示 jtable 列中的密码,我成功地在按下按钮时隐藏密码,但是当再次按下时该列变为空 这是我的代码:

private String mask(int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        sb.append('\u25CF');
    }
    return new String(sb);
}
private String unmask(int length){
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        sb.append('\0');
    }
    return new String(sb);
}

masked=new DefaultTableCellRenderer(){
        private static final long serialVersionUID = 1L;
        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(mask(length));
            return this;
        }
    };

unmasked=new DefaultTableCellRenderer(){
                    private static final long serialVersionUID = 1L;
                    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(unmask(length));
                        return this;
                    }
                };

now the button code:

//i have a global variable set to false,to detect if password is show
boolean show=false;
JButton showpass=new JButton("Show password");
showpass.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
             if(show==false){
                show=true;
                data.getColumnModel().getColumn(3).setCellRenderer(unmasked);//data it's the jtable
                tmodel.fireTableDataChanged();//tmodel it's the jtable model
             }else if(show==true){
                show=false;
                data.getColumnModel().getColumn(3).setCellRenderer(masked);
                tmodel.fireTableDataChanged();

             }          
      }
});

这是我在这里发表的第一篇文章,抱歉英语不好

最佳答案

setText(unmask(length)); 中的 unmasked 是徒劳的。您无法仅从长度开始恢复密码。

使用setText(arg1.toString());

关于java - 按下按钮时在 jtable 列中显示和隐藏密码字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957878/

相关文章:

java - 使用 spring mvc 和 hibernate Rest 服务从数据库保存和检索图像

java - 具有不同轴的嵌套 BoxLayout

java - Netbeans Swing 图形用户界面

java - 使用 SQL 数据库中的数据填充 JTable

java - 如何使用 JNA(打印机和作业)从 WinspoolUtil 和 Winspool 获取 JobInfo2?

Java native 访问 - GetExtendedTcpTable : Bounds exceeds available space

java - 更新Java中的arraylist方法

java - 如何创建自定义 JTable?

java - 表渲染器在 Java 中无法正常工作

java - G1 的 Android 设备更新