【问题标题】:show and hide password chars in a jtable column on button pressed按下按钮时在 jtable 列中显示和隐藏密码字符
【发布时间】:2015-01-15 06:28:48
【问题描述】:

我试图在按下按钮时在 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;
                    }
                };

现在是按钮代码:

//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();

             }          
      }
});

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

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    setText(unmask(length)); 在未蒙面是徒劳的。您不能仅从 lenth 恢复密码。

    使用setText(arg1.toString());

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多