我不知道如何在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
答案 0 :(得分:42)
无需为此创建自定义类,只需使用默认渲染器:
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);
或者更好的方法是在表中实际存储Double值,然后使用正确的数字渲染器,并且数字渲染器自动右对齐。然后,您可以使用Table Format Renderer自定义号码的格式。
答案 1 :(得分:9)
我们需要做一个小修正,正确的方法是 DefaultTableCellRenderer.RIGHT
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );
注意与camickr原始响应的区别,“Price”是列的名称,根据具体情况而变化。
答案 2 :(得分:5)
一种简单的方法是使用DefaultTableModel并覆盖方法 getColumnClass()
例如:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
如果你返回Integer,你的列将对齐anh如果返回String你的列将向左对齐。
答案 3 :(得分:4)
创建一个扩展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;
}
并为相关列安装此渲染器。
现在您只需要确保每个值具有相同的小数位数,因为对于大多数字体,所有数字都具有相同的宽度。
答案 4 :(得分:3)
我有一个方法可以将表中的列与右侧对齐:
private void alignRight(JTable table, int column) {
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
答案 5 :(得分:0)
解决方法是为每列指定自定义cell renderer。每个渲染器将以不同的方式格式化该数据(名称将左对齐,右侧小数,......)
答案 6 :(得分: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);
}
}