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

Loc*_*han 1 java swing jtable date-format tablecellrenderer

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

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

mKo*_*bel 6

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

TableColumnModel m = myTable.getColumnModel();
m.getColumn(5).setCellRenderer(new SubstDateRenderer());
Run Code Online (Sandbox Code Playgroud)

在这里你可以为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);
    }
}
Run Code Online (Sandbox Code Playgroud)