Части выравнивания даты в столбце JTable, отформатированные пропозиционным шрифтом - PullRequest
1 голос
/ 29 июня 2011

Мне нужно, чтобы части даты (дд, ммм, гггг) были выровнены по вертикали. Я задал вопрос на Фиксированная длина месяца и дня в формате даты? для вставки дополнительных букв, но я обнаружил, что это не помогает в случае пропорционального шрифта (ширина букв различна). Например, со шрифтом Lucida Fax:

enter image description here
Создание разных ярлыков для разных частей даты - это вопрос, но он слишком ручной. Трудно обернуть текст, если ширина столбца мала ....
Спасибо

Ответы [ 3 ]

6 голосов
/ 29 июня 2011

обратите внимание, что для всех Renderers (исключая подготовленный Renderer), вы должны / быть уверены, что вы должны вызывать это после любого изменения столбца / строки в JTable

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

здесь вы можете установить BackGround, ForeGround для TableCell

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);
    }
}
1 голос
/ 29 июня 2011

Как подсказывает @mKorbel, подходящий TableCellRenderer является правильным выбором, но вам, возможно, придется переопределить paintComponent() и визуализировать текст, используя графический контекст FontMetrics, как показано здесь .

Если допустимы числовые месяцы, большинство пропорционально разнесенных шрифтов дают символическим глифам одинаковое постоянное опережение.

0 голосов
/ 02 июля 2011

Спасибо за ваши ответы. Я нашел для себя решение, которое использует JTextPane в качестве TableCellRenderer, затем определяет значения табуляции и использует вкладки при форматировании даты. Кажется, это нормально для моего требования, а также имеют другие функции обычного текстового поля, такие как перенос слов ...

...