2016-06-29 9 views
0

Kürzlich habe ich ein kleines Problem mit einer Spalte in einer JTable: Da ich den DefaultTableCellRenderer bearbeitet habe, wird die Passwortspalte nicht fokussiert, wenn ich eine Zeile in der Tabelle fokussiere. Here's a screenshot ein mein Code:JTable cloumn wird nicht mehr fokussiert

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); 
      } 
     } 
    }); 

Ich habe bereits einige verschiedene Möglichkeiten ausprobiert, aber sie haben mir nicht helfen, leider. Hat jemand von euch vielleicht eine Ahnung, gibt es vielleicht eine bessere Implementierung einer Passwort-Spalte in einer JTable ohne dieses Problem? Danke im Voraus!

Antwort

2

In der DefaultTableCellRenderer Implementierung wurde keine Formatierung basierend auf dem aktuellen Status (insbesondere isSelected) eingestellt. Um die Standardformatierung beizubehalten, sollten Sie die übergeordnete Methode vor der Anpassung aufrufen.

   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 
       } 
+0

Oh danke, ich werde mich daran erinnern! –

Verwandte Themen