JTable 列不再集中

JTable cloumn doesn't get focused anymore

最近我在 JTable 中的一列中遇到了一个小问题:因为我编辑了它的 DefaultTableCellRenderer,当我在 table 中聚焦一行时,密码列没有聚焦。 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 中是否有更好的密码列实现而没有这个问题?提前致谢!

已发布的 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
                }