2011-12-15 98 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);