TITLE:JTableのCellEditorにJComboBoxを設定

JTableのCellEditorにJComboBoxを設定

編集者:Terai Atsuhiro~

作成日:2005-09-26
更新日:2021-11-07 (日) 05:32:39
  • category: swing folder: ComboCellEditor title: JTableのCellEditorにJComboBoxを設定 tags: [JTable, TableCellEditor, JComboBox, TableColumn] author: aterai pubdate: 2005-09-26T15:27:12+09:00 description: JTableのCellEditorにJComboBoxを使用し、リストから値を選択できるようにします。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTJy9xBM6I/AAAAAAAAAU8/h5YELRcY4gE/s800/ComboCellEditor.png

概要

JTableCellEditorJComboBoxを使用し、リストから値を選択できるようにします。

概要

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を登録しています。

解説

上記のサンプルでは、1列目のセルエディタとしてコンボボックスを使うDefaultCellEditorを登録しています。

参考リンク

コンボボックスの余白を0にしておくと、セル内にきれいにぴったり収まります(参考:Santhosh Kumar's Weblog : Santhosh Kumar's Weblog)。
  • 以下は余白を0にしていない場合

    #screenshot(,screenshot2.png)

セルの表示にもJComboBoxを使用する場合は、例えば以下のようなJComboBoxを継承するセルレンダラーを使用します。
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;
  }
}

参考リンク

コメント

コメント