2011-12-15 90 views
3

我想在我的JTable-derrived類的頭中設置標籤的垂直對齊方式。JTable頭對齊

我知道setVerticalAlignment(SwingConstants.BOTTOM);

我的頭比字體高得多,我想文將略低於垂直中心。

我該怎麼做,而不是重寫paint()

THX

+0

這是不可能的,一個JLabel的佈局是相當固定的。你可能會嘗試的是設置一個適當大小的不可見圖標,並將文本位置設置爲低於圖標。注意:這將與排序標記衝突,因爲大多數LAF使用圖標。 – kleopatra 2011-12-16 10:03:03

+0

忘了通常的不尋常的要求:爲什麼? – kleopatra 2011-12-16 10:04:41

+1

因爲注意這些微小的細節使事情看起來更好。有時你需要像一個平面設計師,而不是程序員:) – Adam 2011-12-16 10:41:31

回答

7

的方法之一是默認返回JLabel設置RendererTableHeader,例如

final TableCellRenderer tcrOs = myTable.getTableHeader().getDefaultRenderer(); 
     myTable.getTableHeader().setDefaultRenderer(new TableCellRenderer() { 

      @Override 
      public Component getTableCellRendererComponent(JTable table, 
        Object value, boolean isSelected, boolean hasFocus, 
        int row, int column) { 
       JLabel lbl = (JLabel) tcrOs.getTableCellRendererComponent(table, 
         value, isSelected, hasFocus, row, column); 
       lbl.setForeground(AppVariables.textColor); 
       lbl.setBorder(BorderFactory.createCompoundBorder(lbl.getBorder(), 
         BorderFactory.createEmptyBorder(0, 5, 0, 0))); 
       lbl.setHorizontalAlignment(SwingConstants.LEFT); 
       if (isSelected) { 
        lbl.setForeground(Color.red); 
        lbl.setBackground(Color.lightGray); 
       } else { 
        lbl.setForeground(Color.blue); 
        lbl.setBackground(Color.black); 
       } 
       return lbl; 
      } 
     }); 
2
JTableHeader header = table.getTableHeader(); 
TableCellRenderer renderer = header.getDefaultRenderer(); 
renderer.setVerticalAlignment(SwingConstants.BOTTOM);