JTable列中的对齐日期部分以propotional字体格式化

我需要使日期部分(dd,MMMM,yyyy)垂直对齐。 我在日期格式的固定长度的月份和日期问了一个问题? 插入填充字母,但我发现它在比例字体的情况下没有帮助(字母的宽度不同)。 例如,使用Lucida Fax字体:

在此处输入图像描述
为不同的日期部件制作不同的标签正在考虑中,但它太手动了。 如果列宽很小,很难将文本包裹起来….
谢谢

请注意,对于所有渲染器(不包括preparedRenderer),您必须/确保在JTable任何列/行更改后必须调用它

 TableColumnModel m = myTable.getColumnModel(); m.getColumn(5).setCellRenderer(new SubstDateRenderer()); 

在这里你可以为TableCell设置BackGround,ForeGround

 import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.table.DefaultTableCellRenderer; public class SubstDateRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; private Date dateValue; private SimpleDateFormat sdfNewValue = new SimpleDateFormat("dd.MMMM.yyyy"); private String sdfNewValueString = ""; public SubstDateRenderer() {// formating TableCell super(); setHorizontalAlignment(javax.swing.SwingConstants.CENTER); } @Override public void setValue(Object value) { if ((value != null) && (value instanceof Date)) { dateValue = (Date) value; sdfNewValueString = sdfNewValue.format(dateValue); value = sdfNewValueString; } super.setValue(value); } } 

正如@mKorbel建议的那样,合适的TableCellRenderer是正确的选择,但您可能必须覆盖paintComponent()并使用图形上下文的FontMetrics渲染文本,如下所示。

如果数字月份是可接受的,则大多数按比例间隔的字体为数字字形提供相同的恒定前进。

谢谢你的回答。 我找到了一个使用JTextPane作为TableCellRenderer的解决方案,然后定义了tabstop值,并在格式化日期中使用了制表符。 它似乎可以满足我的要求,还有普通文本字段的其他function,如自动换行…