我需要使日期部分(dd、MMMM、yyyy)垂直对齐。我在日期格式的固定长度的月份和日期中问了一个问题?插入填充字母,但我发现在比例字体的情况下它没有帮助(字母的宽度不同)。例如,使用 Lucida Fax 字体:
正在考虑为不同的日期部分制作不同的标签,但这太手动了。如果列宽很小,很难使文本换行......
谢谢
我需要使日期部分(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 的解决方案,然后定义制表位值,并在格式化日期中使用制表符。这似乎符合我的要求,并且还具有普通文本字段的其他功能,例如自动换行...