我不知道如何對齊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
我不知道如何對齊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
沒有必要爲此創建自定義類,只是使用的默認渲染:
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);
或者更好的辦法是真正雙值存儲在表中,然後適當的數字渲染會使用和數字渲染器自動對齊。然後,您可以使用Table Format Renderer自定義數字的格式。
上面去它的方法是爲每列指定自定義cell renderer。每個渲染器將以不同格式的數據(名稱將é左對齊,小數向右,...)
創建擴展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;
}
併爲相關列安裝此呈現器。
現在您只需確保每個值具有相同的小數位數,因爲對於大多數字體,所有數字都具有相同的寬度。
我有一個表中的對齊列在右邊的方法:
private void alignRight(JTable table, int column) {
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
我們需要做小幅盤整,以正確的方式是DefaultTableCellRenderer.RIGHT
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer(rightRenderer);
注意與camickr的原始響應不同,「Price」是列的名稱,根據情況而變化。
RIGHT實際上是在接口SwingConstants(JLabel和DefaultTableCellRenderer都實現/繼承)中定義的。因此,這些前綴中的任何一個都會爲RIGHT提供值...但爲了清楚起見,爲什麼不使用SwingConstants.RIGHT?或者,如果您覺得您想確保自己擁有與該渲染器相關的「正確」,則可以使用rightRenderer.RIGHT。 – gwideman
'SwingConstants.RIGHT'是合適的常量。 –
事實上,當使用'DefaultTableCellRenderer.RIGHT'時,Eclipse會給出警告_「應該直接訪問靜態字段SwingConstants.RIGHT」_ –
一個簡單的方法是使用DefaultTableModel,並重寫方法的getColumnClass()
例:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
如果返回整數,你的列將右對齊無水如果返回的字符串的列將左對齊。
爲多個表其作爲@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);
}
}
我如何將其調整到編輯時的權利? – pts
正確的常量名稱是'DefaultTableCellRenderer.RIGHT',請參閱此線程中的@ Adrian的帖子。(或'SwingConstats.RIGHT')。 – xmedeko