1

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

在此处输入图像描述
正在考虑为不同的日期部分制作不同的标签,但这太手动了。如果列宽很小,很难使文本换行......
谢谢

4

3 回答 3

6

请注意,对于所有渲染器(不包括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);
    }
}
于 2011-06-29T08:05:59.710 回答
1

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

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

于 2011-06-29T12:13:34.300 回答
0

感谢您的回答。我为自己找到了一个使用 JTextPane 作为 TableCellRenderer 的解决方案,然后定义制表位值,并在格式化日期中使用制表符。这似乎符合我的要求,并且还具有普通文本字段的其他功能,例如自动换行...

于 2011-07-02T16:28:01.650 回答