2010-03-09 156 views
23

我不知道如何對齊JTable中單元格的值。對齊JTable中單元格的值?

對於防爆,JTable中顯示, 名稱工資 X先生100000.50 XXXX 234.34 YYYY 1205.50

我要對齊的 「工資」,在下面的格式。

Name  Salary 
    Mr.X  100000.50 
    XXXX   234.34 
    YYYy  1205.50 

如何對齊由於JTable

回答

42

沒有必要爲此創建自定義類,只是使用的默認渲染:

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); 
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT); 
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer); 

或者更好的辦法是真正雙值存儲在表中,然後適當的數字渲染會使用和數字渲染器自動對齊。然後,您可以使用Table Format Renderer自定義數字的格式。

+0

我如何將其調整到編輯時的權利? – pts

+0

正確的常量名稱是'DefaultTableCellRenderer.RIGHT',請參閱此線程中的@ Adrian的帖子。(或'SwingConstats.RIGHT')。 – xmedeko

0

上面去它的方法是爲每列指定自定義cell renderer。每個渲染器將以不同格式的數據(名稱將é左對齊,小數向右,...)

4

this forum post

創建擴展DefaultTableCellRenderer一類,並實現getTableCellRendererComponent()方法,像:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
{ 
    JLabel renderedLabel = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    renderedLabel.setHorizontalAlignment(SwingConstant s.RIGHT); 
    return renderedLabel; 
} 

併爲相關列安裝此呈現器。

現在您只需確保每個值具有相同的小數位數,因爲對於大多數字體,所有數字都具有相同的寬度。

3

我有一個表中的對齊列在右邊的方法:

private void alignRight(JTable table, int column) { 
    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); 
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT); 
    table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer); 
} 
8

我們需要做小幅盤整,以正確的方式是DefaultTableCellRenderer.RIGHT

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); 
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT); 
tableExample.getColumn("Price").setCellRenderer(rightRenderer); 

注意與camickr的原始響應不同,「Price」是列的名稱,根據情況而變化。

+1

RIGHT實際上是在接口SwingConstants(JLabel和DefaultTableCellRenderer都實現/繼承)中定義的。因此,這些前綴中的任何一個都會爲RIGHT提供值...但爲了清楚起見,爲什麼不使用SwingConstants.RIGHT?或者,如果您覺得您想確保自己擁有與該渲染器相關的「正確」,則可以使用rightRenderer.RIGHT。 – gwideman

+2

'SwingConstants.RIGHT'是合適的常量。 –

+1

事實上,當使用'DefaultTableCellRenderer.RIGHT'時,Eclipse會給出警告_「應該直接訪問靜態字段SwingConstants.RIGHT」_ –

4

一個簡單的方法是使用DefaultTableModel,並重寫方法的getColumnClass()
例:

DefaultTableModel model = new DefaultTableModel() { 
     @Override 
     public Class getColumnClass(int columnIndex) { 
      if (columnIndex == 0) { 
       return Integer.class; 
      } else { 
       return String.class; 
      } 
     } 
    }; 

如果返回整數,你的列將右對齊無水如果返回的字符串的列將左對齊。

0
一次我設法做到這一點...

爲多個表其作爲@camickr公佈,但我加了頭太

DefaultTableCellRenderer rightRenderer_c = new DefaultTableCellRenderer(); 
    DefaultTableCellRenderer rightRenderer_h = new DefaultTableCellRenderer(); 
    rightRenderer_c.setHorizontalAlignment(javax.swing.JLabel.RIGHT); 

    for(JTable t : Tables){ //Tables is an ArrayList<JTable> 

     //for the headers : 
     rightRenderer_h = (DefaultTableCellRenderer) t.getTableHeader().getDefaultRenderer(); 
     rightRenderer_h.setHorizontalAlignment(javax.swing.JLabel.RIGHT); 

     //for cells : 
     for(int i=0; i < t.getColumnCount(); i++){ 
      t.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_c); 
     } 
    }