http://docs.oracle.com/javafx/2/ui_controls/tree-view.htmのJavaFXチュートリアルに触発されて、編集モードでセルに入る動作を変更するにはどうすればよいか疑問に思っています。私が取得したい動作は
- マウスの左クリックで:セルを選択するだけです
- マウスを2回左クリックした場合:セルを選択してアクションを呼び出します
- マウスの右クリックで:セルを編集モードで入力します
TreeView / TreeCellにマウスイベントハンドラーをインストールしようとしましたが、イベントはすでにTreeCellBehaviorによって消費されているようです。
TreeCellBehviorクラスには、次のメソッドがあります。
private void simpleSelect(MouseEvent e) {
TreeView tv = getControl().getTreeView();
TreeItem treeItem = getControl().getTreeItem();
int index = getControl().getIndex();
MultipleSelectionModel sm = tv.getSelectionModel();
boolean isAlreadySelected = sm.isSelected(index);
tv.getSelectionModel().clearAndSelect(index);
// handle editing, which only occurs with the primary mouse button
if (e.getButton() == MouseButton.PRIMARY) {
if (e.getClickCount() == 1 && isAlreadySelected) {
tv.edit(treeItem);
} else if (e.getClickCount() == 1) {
// cancel editing
tv.edit(null);
} else if (e.getClickCount() == 2/* && ! getControl().isEditable()*/) {
if (treeItem.isLeaf()) {
// attempt to edit
tv.edit(treeItem);
} else {
// try to expand/collapse branch tree item
treeItem.setExpanded(! treeItem.isExpanded());
}
}
}
}
TreeCellBehaviorを自分の実装に置き換えることができるかどうかはわかりません。この方法は私的なものですが、これが正しい方法かどうかはわかりません。何か案が?