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 に答える