Swing/ComboCellRenderer のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboCellRenderer へ行く。
- 1 (2007-08-04 (土) 15:02:37)
- 2 (2010-11-01 (月) 23:09:02)
- 3 (2010-11-02 (火) 14:23:32)
- 4 (2010-11-02 (火) 20:28:32)
- 5 (2011-03-24 (木) 16:27:36)
- 6 (2013-02-09 (土) 23:47:36)
- 7 (2015-01-07 (水) 16:21:01)
- 8 (2016-06-07 (火) 14:44:35)
- 9 (2016-09-06 (火) 12:54:07)
- 10 (2017-10-14 (土) 17:56:22)
- 11 (2019-04-25 (木) 17:34:11)
- 12 (2021-02-03 (水) 01:12:38)
- 13 (2024-03-14 (木) 12:16:02)
- title: JTableのCellRendererにJComboBoxを設定 tags: [JTable, JComboBox, TableCellRenderer, TableCellEditor] author: aterai pubdate: 2007-03-19 description: JTableのCellRendererとしてJComboBoxを使用します。
概要
JTable
のCellRenderer
としてJComboBox
を使用します。
Screenshot
Advertisement
サンプルコード
class ComboCellRenderer extends JComboBox implements TableCellRenderer {
private static final Color ec = new Color(240, 240, 255);
private final JTextField editor;
public ComboCellRenderer() {
super();
setEditable(true);
setBorder(BorderFactory.createEmptyBorder());
editor = (JTextField) getEditor().getEditorComponent();
editor.setBorder(BorderFactory.createEmptyBorder());
editor.setOpaque(true);
}
@Override public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int column) {
removeAllItems();
if (isSelected) {
editor.setForeground(table.getSelectionForeground());
editor.setBackground(table.getSelectionBackground());
} else {
editor.setForeground(table.getForeground());
editor.setBackground((row % 2 == 0) ? ec : table.getBackground());
}
addItem((value == null) ? "" : value.toString());
return this;
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、1
列目(中央)のセルの表示をJComboBox
にするために、これを継承するセルレンダラーを設定しています。1
列目はセルエディタもJComboBox
ですが、これらは同じJComboBox
のインスタンスではなく、別々に用意しています。
レンダラーで使用するJComboBox
は、セルの表示のみに使用するため、以下のように設定しています。
- 表示用のアイテム(文字列)を一つだけ持つ
- 編集可にして
EditorComponent
の背景色などを他のセルと同様になるように変更 - セル内にきれいに収まるように余白を
0
に設定