对齐JTable中单元格的值?

我不知道如何在JTable中对齐单元格的值。

对于Ex,Jtable显示,姓名薪水Mr.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); 

或者更好的方法是在表中实际存储Double值,然后使用正确的数字渲染器,并且数字渲染器自动右对齐。 然后,您可以使用表格格式渲染器自定义数字的格式 。

我们需要做一个小的修正,正确的方法是DefaultTableCellRenderer.RIGHT

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

注意与camickr的原始响应的差异,“Price”是列的名称,根据情况改变。

来自这个论坛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; } 

并为相关列安装此渲染器。

现在您只需要确保每个值具有相同的小数位数,因为对于大多数字体,所有数字都具有相同的宽度。

一种简单的方法是使用DefaultTableModel和override方法getColumnClass()
例如:

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

如果返回Integer,则列将对齐anh如果返回String,则列将向左对齐。

我有一个方法将表中的列与右对齐:

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

解决方法是为每列指定自定义单元格渲染器 。 每个渲染器将以不同方式格式化该数据(名称将对齐左侧,小数位于右侧,……)

至于多个表,我设法做到这一点…它作为@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 //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); } }