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

Posted

技术标签:

【中文标题】以比例字体格式化的 JTable 列中的对齐日期部分【英文标题】:Alignment date parts in JTable column formatted in propotional font 【发布时间】:2011-09-24 22:23:30 【问题描述】:

我需要使日期部分(dd、MMMM、yyyy)垂直对齐。我在Fixed length of month and day in date format? 提出了一个问题来插入填充字母,但我发现在比例字体的情况下它没有帮助(字母的宽度不同)。例如,使用 Lucida Fax 字体:

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

【问题讨论】:

问题是如何制作一个日期部分垂直对齐的日期列?正如您在所附图片中看到的那样,年份没有对齐,因为山的宽度不同。 【参考方案1】:

请注意,对于所有渲染器(不包括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);
    

【讨论】:

对不起,我不明白这个答案。此代码为日期类型创建一个 TableCellRenderer。结果是居中对齐的文本。我需要的是日期部分(dd,MM,YYYY)垂直对齐。您可以在附图中看到,年份并没有很好地对齐。 您是否尝试将 ColumnRenderer 与您在问题中链接的线程放在一起,对我来说可以一起工作,并且也可以使用 html 语法 hmmm 可能不是我的纳瓦霍语 英语,将 Html 代码/语法放在 TableCell 中,TableCell 默认返回 JLabel,JLabel 是任何可能的 ZOO 中最好的 JComponents :-)【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于以比例字体格式化的 JTable 列中的对齐日期部分的主要内容,如果未能解决你的问题,请参考以下文章

请问在java JTable中如何设置单元格字体居中对齐?

“在列中对齐字段”C / C ++

Eclipse 格式化程序对齐列中的字段

Eclipse 代码格式未正确对齐列中的字段

单击以打开 JComboBox 时,JTable 单元格失去价值

JTable中的换行,右对齐,自动调整行高