2016-06-29 17 views
0

最近我有一個JTable中的一列的小問題:因爲我編輯它的DefaultTableCellRenderer密碼列不聚焦,當我在表中集中一行。 Here's a screenshot了我的代碼:JTable cloumn沒有得到專注

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中更好地實現密碼列?提前致謝!

回答

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

噢謝謝你,我會記住的! –