日付部分 (dd、MMMM、yyyy) を垂直方向に揃える必要があります。日付形式の月と日の固定長は? で質問しました。パディング文字を挿入しますが、プロポーショナル フォントの場合は役に立たないことがわかりました (文字の幅が異なります)。たとえば、Lucida Fax フォントの場合:
日付の部分ごとに別のラベルを作ることも検討していますが、あまりにも手作業です。列幅が狭いと折り返すのが難しい…。
ありがとう
日付部分 (dd、MMMM、yyyy) を垂直方向に揃える必要があります。日付形式の月と日の固定長は? で質問しました。パディング文字を挿入しますが、プロポーショナル フォントの場合は役に立たないことがわかりました (文字の幅が異なります)。たとえば、Lucida Fax フォントの場合:
日付の部分ごとに別のラベルを作ることも検討していますが、あまりにも手作業です。列幅が狭いと折り返すのが難しい…。
ありがとう
すべてのレンダラー (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);
}
}
@mKorbel が示唆するように、適切な選択が適切ですが、ここに示すように、グラフィックス コンテキストを使用してテキストをTableCellRenderer
オーバーライドしてレンダリングする必要がある場合があります。paintComponent()
FontMetrics
数値の月が許容される場合、ほとんどのプロポーショナル フォントは、数字グリフに同じ一定の前進を与えます。
回答ありがとうございます。JTextPane を TableCellRenderer として使用し、タブストップ値を定義し、日付の書式設定にタブを使用するソリューションを自分で見つけました。私の要件には問題ないようで、ワードラップなどの通常のテキストフィールドの他の機能もあります...