があり、ノードを 1 回クリックしたときにJTree
そのメソッドが呼び出されるようにしたいと考えています。getTreeCellEditorComponent()
クラスのドキュメントDefaultTreeCellEditor
(私が拡張したもの) によると、「編集は、マウスのトリプル クリック、またはクリック、一時停止、クリック、および 1200 ミリ秒の遅延の後に開始されます。」シングルクリックで編集プロセスを開始できるように、この動作をオーバーライドする方法はありますか?
質問する
5348 次
2 に答える
5
JTree
API では を推奨していMouseListener
ますが、キー バインドも便利です。startEditingAtPath()
この例では、Enter キーを呼び出してバインドします。
final JTree tree = new JTree();
tree.setEditable(true);
MouseListener ml = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = tree.getRowForLocation(e.getX(), e.getY());
TreePath path = tree.getPathForLocation(e.getX(), e.getY());
if (row != -1) {
if (e.getClickCount() == 1) {
tree.startEditingAtPath(path);
}
}
}
};
tree.addMouseListener(ml);
tree.getInputMap().put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "startEditing");
補遺:使いやすさに関するこの回答も参照してください。
于 2013-03-26T11:49:19.397 に答える
4
技術的には、DefaultTreeCellEditor をサブクラス化し、そのロジックを微調整して、最初の 1 回のクリックで編集を開始できます。
JTree tree = new JTree();
tree.setEditable(true);
TreeCellEditor editor =
new DefaultTreeCellEditor(tree, (DefaultTreeCellRenderer) tree.getCellRenderer()) {
@Override
protected boolean canEditImmediately(EventObject event) {
if((event instanceof MouseEvent) &&
SwingUtilities.isLeftMouseButton((MouseEvent)event)) {
MouseEvent me = (MouseEvent)event;
return ((me.getClickCount() >= 1) &&
inHitRegion(me.getX(), me.getY()));
}
return (event == null);
}
};
tree.setCellEditor(editor);
ただし、編集を開始しないと選択できないため、ユーザビリティの癖があります。これは、意図している場合と意図していない場合があります。
于 2013-03-26T13:11:35.427 に答える