Swing/AlignDecimalCellRenderer のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/AlignDecimalCellRenderer へ行く。
- 1 (2016-01-01 (金) 16:25:51)
- 2 (2017-06-16 (金) 14:10:35)
- 3 (2018-06-21 (木) 17:50:22)
- 4 (2020-06-07 (日) 15:59:50)
- 5 (2021-11-26 (金) 05:11:18)
- title: JTableのセル内で小数点揃え tags: [JTable, JTextPane, TabSet] author: aterai pubdate: 2015-11-16T00:43:30+09:00 description: JTableのセルレンダーとしてTabSetを設定したJTextPaneを使用し、数値の小数点揃えを行います。
概要
JTable
のセルレンダーとしてTabSet
を設定したJTextPane
を使用し、数値の小数点揃えを行います。
Screenshot
Advertisement
サンプルコード
class AlignDecimalCellRenderer implements TableCellRenderer {
private final JPanel p = new JPanel(new BorderLayout());
private final JTextPane textPane = new JTextPane() {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.width = 60;
return d;
}
};
protected AlignDecimalCellRenderer() {
textPane.setOpaque(false);
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setTabSet(attr, new TabSet(new TabStop[] {
new TabStop(25f, TabStop.ALIGN_DECIMAL, TabStop.LEAD_NONE)
}));
textPane.setParagraphAttributes(attr, false);
p.add(textPane, BorderLayout.EAST);
}
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
textPane.setFont(table.getFont());
textPane.setText("\t" + Objects.toString(value, ""));
if (isSelected) {
textPane.setForeground(table.getSelectionForeground());
p.setBackground(table.getSelectionBackground());
} else {
textPane.setForeground(table.getForeground());
p.setBackground(table.getBackground());
}
return p;
}
}
View in GitHub: Java, Kotlin解説
このサンプルでは、以下のようなセルレンダラーを作成して、少数点揃えを行っています。
- 小数点揃えを行う
TabStop.ALIGN_DECIMAL
を設定したTabSet
を作成し、これをJTextPane
に適用 BorderLayout
を使用するJPanel
の右側に、推奨幅を固定したJTextPane
を配置- この
JPanel
をセルコンポーネントとして使用するセルレンダラーを作成 TableCellRenderer#getTableCellRendererComponent(...)
メソッドでセルコンポーネントを返す際、JTextPane
には実際の数値の前にタブ\t
を挿入することで、指定した列の数値を小数点揃えで表示