JTable cloumn不再受到关注

时间:2016-06-29 21:05:04

标签: java swing jtable tablecellrenderer

最近我在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密码列实现没有这个问题?提前谢谢!

1 个答案:

答案 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
                }