Swing/ComboCellEditor のバックアップの現在との差分(No.9)
TITLE:JTableのCellEditorにJComboBoxを設定
JTableのCellEditorにJComboBoxを設定
編集者:Terai Atsuhiro~
作成日:2005-09-26
更新日:2021-11-07 (日) 05:32:39
概要
JTable
のCellEditor
にJComboBox
を使用し、リストから値を選択できるようにします。
Screenshot
Advertisement
概要
JTableのCellEditorにJComboBoxを使用し、リストから値を選択できるようにします。サンプルコード
#spanend
#spanadd
JComboBox cb = new JComboBox(new String[] {"名前0", "名前1", "名前2"});
#spanend
#spanadd
cb.setBorder(BorderFactory.createEmptyBorder());
#spanend
#spandel
#screenshot
#spanend
#spanadd
TableColumn col = table.getColumnModel().getColumn(1);
#spanend
#spanadd
col.setCellEditor(new DefaultCellEditor(cb));
#spanend
#spanadd
// col.setCellRenderer(new ComboBoxCellRenderer());
#spanend
#spanadd
View in GitHub: Java, Kotlinサンプルコード
JComboBox cb = new JComboBox(new String[] {"名前0", "名前1", "名前2"}); cb.setBorder(BorderFactory.createEmptyBorder()); TableColumn col = table.getColumnModel().getColumn(1); col.setCellEditor(new DefaultCellEditor(cb)); //col.setCellRenderer(new ComboBoxCellRenderer());
解説
上記のサンプルでは、1
列目のセルエディタとしてコンボボックスを使うDefaultCellEditor
を登録しています。
- &jnlp;
- &jar;
- &zip;
- コンボボックスの余白を
0
に設定しないとセル内文字列の上下が欠けてしまう場合がある
解説
上記のサンプルでは、1列目のセルエディタとしてコンボボックスを使うDefaultCellEditorを登録しています。参考リンク
- Santhosh Kumar's Weblog : Santhosh Kumar's Weblog
- JTableのCellRendererにJComboBoxを設定
- セルの表示にも
JComboBox
を使用する場合はJComboBox
を継承するセルレンダラーを使用する
- セルの表示にも
- JComboBoxセルエディタのドロップダウンリストを編集開始直後は表示しないよう設定する
- 以下は余白を0にしていない場合
#screenshot(,screenshot2.png)
class ComboBoxCellRenderer extends JComboBox implements TableCellRenderer { private static final Color ec = new Color(240, 240, 255); private final JTextField editor; public ComboBoxCellRenderer() { 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; } }