我不知道如何对齐 JTable 中的单元格值。
例如,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”是列的名称,根据情况更改。
SwingConstants.RIGHT
是恰当的常量。 - Erick RobertsonDefaultTableCellRenderer.RIGHT
时,Eclipse会发出警告:“静态字段SwingConstants.RIGHT应直接访问”。 - Zach Olivare一种简单的方法是使用DefaultTableModel并重写方法getColumnClass()
例如:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
来自这个论坛帖子:
创建一个继承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);
}
关于一次操作多个表,我成功地做到了这一点...就像@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);
}
}
DefaultTableCellRenderer.RIGHT
,请参见本主题中@Adrian的帖子(或SwingConstats.RIGHT
)。 - xmedeko