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