DefaultCellEditorクラスの定義とコンストラクタ
JTreeクラスではツリー上で直接ノードのデータを編集するための機能が付いています。どのように編集を行うのかを管理しているのがCellEditorインターフェースを実装したクラスとなります。
実際に利用するにはCellEditorインターフェースを継承したクラスを自分で作成するか、実装クラスとして用意されたDefaultCellEditorクラスが用意されていますのでそれを利用します。基本的なことはDefaultCellEditorクラスで十分できますのでここからはDefaultCellEditorの使い方を見ていきます。
DefaultCellEditorクラスの定義を確認します。クラス図は次のようになっています。
java.lang.Object javax.swing.AbstractCellEditor javax.swing.DefaultCellEditor public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor
DefaultCellEditorクラスはTreeCellEditorインターフェースを実装したクラスです。TableCellEditorインターフェースも実装していますがこれはDefaultCellEditorクラスがJTableクラスでも利用されるためです。
DefaultCellEditorクラスのコンストラクタ
DefaultCellEditorクラスをを利用するにはコンストラクタを使ってDefaultCellEditorクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。
コンストラクタ |
---|
DefaultCellEditor(JCheckBox checkBox) チェックボックスを使う DefaultCellEditor オブジェクトを構築します。 |
DefaultCellEditor(JComboBox comboBox) コンボボックスを使う DefaultCellEditor オブジェクトを構築します。 |
DefaultCellEditor(JTextField textField) テキストフィールドを使う DefaultCellEditor を構築します。 |
コンストラクタは3つ用意されています。それぞれ引数としてJTextFieldクラス、JCheckBoxクラス、JComboBoxクラスを使います。これはノードの編集を行う時にテキストボックスで直接値を入力してもらうのか、チェックボックスやコンボボックスで事前に用意された値から選択してもらうのかなど、どのように編集を行うのかでコンストラクタを選択します。
では3番目のコンストラクタを確認してみます。
public DefaultCellEditor(JTextField textField)
テキストフィールドを使う DefaultCellEditor を構築します。 パラメータ: textField - JTextField オブジェクト
引数に編集時に使用するJTextFieldクラスのオブジェクトを指定します。
実際の使い方は次のようになります。
JTree tree = new JTree(root); DefaultCellEditor editor = new DefaultCellEditor(new JTextField(16)); tree.setCellEditor(editor);
ツリーを編集可能にする
セルエディタを使用してツリー上で直接ノードの編集を行うにはツリーを編集可能に設定する必要があります。デフォルトでは編集不可となっています。JTreeクラスで用意されている「setEditable」メソッドを使います。
public void setEditable(boolean flag)
ツリーが編集可能かどうかを設定します。新しい設定が既存の設定と違う場合は プロパティー変更イベントをトリガーします。 パラメータ: flag - boolean 値。ツリーが編集可能な場合は true
引数にツリーを編集可能にするかどうかを表すboolean型の値を設定します。「true」を設定すると編集可能となり、「false」を設定すると編集不可となります。
実際の使い方は次のようになります。
JTree tree = new JTree(root); tree.setEditable(true); DefaultCellEditor editor = new DefaultCellEditor(new JTextField(16)); tree.setCellEditor(editor);
サンプルプログラム
では簡単なサンプルを作成して試してみます。