Swing/ComboCellRenderer のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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を設定
Posted by terai at 2007-03-19
JTableのCellRendererにJComboBoxを設定
JTableのCellRendererとしてJComboBoxを使用します。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
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);
}
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;
}
}
解説
上記のサンプルでは、1列目(中央)のセルの表示をJComboBoxにするために、これを継承するセルレンダラーを設定しています。1列目はセルエディタもJComboBoxですが、これらは同じJComboBoxのインスタンスではなく、別々に用意しています。
レンダラーで使用するJComboBoxは、セルの表示のみに使用するため、以下のように設定しています。
- 表示用のアイテム(文字列)を一つだけ持つ
- 編集可にしてEditorComponentの背景色などを他のセルと同様になるように変更
- セル内にきれいに収まるように余白を0に設定
参考リンク
コメント
- セルの幅を大きくするとセルの表示が消えますが・・・これは一体なんでしょうか? -- ichikawa?