私はマルチ選択ロジックを実装するJTreeを持っています。JTree "ctrl"選択モードを常に有効にする方法
これは、マウス+ Ctrlキーを押しながらすべての選択を行うと効果的です。ユーザーがCtrlキーを押した状態で選択すると、ロジックが壊れます。
なぜそれが壊れているのかわかりませんが、Ctrlキーを押しながら選択が行われたことをTreeSelectionModelに常に示すことが考えられます。
あなたは何をお勧めしますか?
私はマルチ選択ロジックを実装するJTreeを持っています。JTree "ctrl"選択モードを常に有効にする方法
これは、マウス+ Ctrlキーを押しながらすべての選択を行うと効果的です。ユーザーがCtrlキーを押した状態で選択すると、ロジックが壊れます。
なぜそれが壊れているのかわかりませんが、Ctrlキーを押しながら選択が行われたことをTreeSelectionModelに常に示すことが考えられます。
あなたは何をお勧めしますか?
私はあなたがJTreeのとDefaultTreeSelectionModelを拡張する必要があります解決策
を見つけたと思います。
JTreeの関連するメソッド:
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/// Implement selection using "adding" only logic. //
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
@Override
public void setSelectionPath(TreePath path) {
System.out.println("MLDebugJTree: setSelectionPath(" + path + ")");
addSelectionPath(path);
return;
//super.setSelectionPath(path);
}
@Override
public void setSelectionPaths(TreePath[] paths) {
System.out.println("MLDebugJTree: setSelectionPaths(" + paths + ")");
addSelectionPaths(paths);
return;
}
@Override
public void setSelectionRow(int row) {
System.out.println("MLDebugJTree: setSelectionRow(" + row + ")");
addSelectionRow(row);
return;
//super.setSelectionRow(row);
}
@Override
public void setSelectionRows(int[] rows) {
System.out.println("MLDebugJTree: setSelectionRows(" + rows + ")");
addSelectionRows(rows);
return;
//super.setSelectionRows(rows);
}
DefaultSelectionModel関連するメソッド:
package com.ml.tree2.model.impl;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;
public class MLTreeSelectionModel extends DefaultTreeSelectionModel {
private static final long serialVersionUID = -4270031800448415780L;
@Override
public void addSelectionPath(TreePath path) {
// Don't do overriding logic here because addSelectionPaths is ultimately called.
super.addSelectionPath(path);
}
@Override
public void addSelectionPaths(TreePath[] paths) {
if(paths != null) {
for(TreePath path : paths) {
TreePath[] toAdd = new TreePath[1];
toAdd[0] = path;
if (isPathSelected(path)) {
// If path has been previously selected REMOVE THE SELECTION.
super.removeSelectionPaths(toAdd);
} else {
// Else we really want to add the selection...
super.addSelectionPaths(toAdd);
}
}
}
}
HTH。
ありがとう、私は十分にこれをupvoteすることはできません、これは私の検索の負荷を節約! –
別の解決策は、単にBasicTreeUIを拡張し、あなたのニーズに合わせて選択動作を変更するには、次のようになります。
JTree tree = new JTree();
tree.setUI(new MultiSelectionTreeUI());
この解決策では別のL&F(p.ex. 'WindowsTreeUI')の代わりに' BasicUI'に戻りますが、これは一番きれいです。 –
いくつかのことを明確にする必要があります。
そして、あなたJTreeの上のUIがいることを設定。 CTRL +左クリックでjtree内の複数のノードを選択できますが、左クリックすると1つしか選択されません。だからあなたが望むのは、ctrlが常に押されていて、クリックごとに選択肢を追加し続けるので、ツリーを動作させることです。 – willcodejavaforfood
@willcodejavaforfood - まったく。 –