« ダブルクリックで JToggleButton | トップページ | サーバダウン時の対応 »

2010年2月 1日 (月)

TreeCellEditor 設定

スタンプ箱のラベルを編集するのに,オリジナルでは右クリックから「名称変更」を選ぶようになっている。DefaultTreeCellEditor を組み込むと,右クリックを使わなくても,マウスをトリプルクリックするか,マウスクリックを休止をはさんで 2 回行なって 1200 ミリ秒待つと編集が開始されるようになる。これをスタンプ箱に組み込んだ。ついでに,1200 ミリ秒を少し短くした。

client/StampTree.java

public StampTree(TreeModel model) {
 ・
 ・
  // TreeCellEditor セット
  this.setEditable(true);
  this.setCellEditor(new MyDefaultTreeCellEditor(this, renderer));

ui/MyDefaultTreeCellEditor.java

package open.dolphin.ui;

import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.JTree;
import javax.swing.Timer;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellEditor;

/**
 * TreeCellEditor
 * @author pns
 */
public class MyDefaultTreeCellEditor extends DefaultTreeCellEditor {
  public MyDefaultTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
    super(tree, renderer);
    realEditor = this.createTreeCellEditor();
  }

  @Override
  protected TreeCellEditor createTreeCellEditor() {
    DefaultTextField textField = new DefaultTextField(BorderFactory.createLineBorder(Color.blue));
    textField.setOpaque(true); // これをしないと,編集時のバックグランドが白くならない

    DefaultCellEditor editor = new DefaultCellEditor(textField) {
      @Override
      public boolean shouldSelectCell(EventObject event) {
      boolean retValue = super.shouldSelectCell(event);
      return retValue;
      }
    };

    // One click to edit.
    editor.setClickCountToStart(1);
    return editor;
  }

  /**
   * 編集が始まるまでの delay を早くした(デフォルトは 1200 msec)
   */
  @Override
  protected void startEditingTimer() {
    if(timer == null) {
      timer = new Timer(900, this);
      timer.setRepeats(false);
    }
    timer.start();
  }
}

« ダブルクリックで JToggleButton | トップページ | サーバダウン時の対応 »

OpenDolphin」カテゴリの記事