Swing/AlignDecimalCellRenderer の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/AlignDecimalCellRenderer へ行く。
- Swing/AlignDecimalCellRenderer の差分を削除
--- category: swing folder: AlignDecimalCellRenderer title: JTableのセル内で小数点揃え tags: [JTable, JTextPane, TabSet, TabStop] author: aterai pubdate: 2015-11-16T00:43:30+09:00 description: JTableのセルレンダーとしてTabSetを設定したJTextPaneを使用し、数値の小数点揃えを行います。 image: https://lh3.googleusercontent.com/-IFQyVmxHhh0/VkilPqJfutI/AAAAAAAAOGk/ZzzXd8SaK_g/s800-Ic42/AlignDecimalCellRenderer.png --- * 概要 [#summary] `JTable`のセルレンダーとして`TabSet`を設定した`JTextPane`を使用し、数値の小数点揃えを行います。 #download(https://lh3.googleusercontent.com/-IFQyVmxHhh0/VkilPqJfutI/AAAAAAAAOGk/ZzzXd8SaK_g/s800-Ic42/AlignDecimalCellRenderer.png) * サンプルコード [#sourcecode] #code(link){{ 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; } } }} * 解説 [#explanation] このサンプルでは、以下のようなセルレンダラーを作成して、`JTable`の列内で少数点揃えを行っています。 - 小数点揃えを行う`TabStop.ALIGN_DECIMAL`を設定した`TabSet`を作成し、これを`JTextPane`に適用 - `BorderLayout`を使用する`JPanel`の右側に、推奨幅を固定した`JTextPane`を配置 - 小数点揃えを行う`TabStop.ALIGN_DECIMAL`を設定した`TabSet`を作成して`JTextPane`に適用 - `BorderLayout`を使用する`JPanel`の右側に推奨幅を固定した`JTextPane`を配置 - この`JPanel`をセルコンポーネントとして使用するセルレンダラーを作成 - `TableCellRenderer#getTableCellRendererComponent(...)`メソッドでセル描画用のコンポーネントを返す際、`JTextPane`には実際の数値の前にタブ`\t`を挿入することで指定した列の数値を小数点揃えで表示 * 参考リンク [#reference] - [[JTextPaneにTabSetを設定してTabStopの文字列揃えをテストする>Swing/TabSet]] * コメント [#comment] #comment #comment