@ MadProgrammerの提案に基づいた解決策を彼のコメントに書いてしまった。
public class CustomTreeNode extends DefaultMutableTreeNode {
private int position;
public CustomTreeNode(String text, int position){
super(text);
this.position = position;
}
public int getPosition(){
return this.position;
}
}
これは関係なく、名前の(@Sergiy Medvynskyyさんも役立つソリューションを参照)、私は私が好きなオブジェクトのインデックスを保持することができますので、同様に、私は、ツリーノードクラスを作成しました。
が、私はそうのようなオブジェクトを初期化し(これはループの中にあった):私は簡単に取り込むことができるよどの
@Override
public void valueChanged(TreeSelectionEvent e) {
TreePath[] selectedPaths = tree.getSelectionPaths();
TreePath parentPath = tree.getClosestPathForLocation(1, 1);
if (selectedPaths == null)
return;
ArrayList<Integer> validRows = new ArrayList<>();
for (TreePath tp : selectedPaths){
if (tp.getParentPath() != parentPath)
continue;
//get node that current selected path points too, then get the custom index of that
CustomTreeNode selectedNode = (CustomTreeNode) tp.getLastPathComponent();
System.out.println(selectedNode.getPosition());
validRows.add(selectedNode.getPosition());
}
お知らせ:
//root node
CustomTreeNode polygon = new CustomTreeNode("Polygon " + (i+1), i);
は、私はこのようなノードを使用しましたArrayList validRowすべてのノードを反復処理せずに、展開したノードを削除します。
私は質問がなぜでしょうか?あなたは結果として「3」を必要とすることを達成しようとしていますか?物事の音から、問題なくノードを得ることができます。なぜ行の値が必要ですか? 'DefaultMutableTreeNode'のようなものを使用している場合は、目的を達成するのに役立つ追加情報を含むことができる' userObject'を提供することができます – MadProgrammer
@MadProgrammerこのJTreeは、ユーザがポリゴンを追加または削除すると変化するノードを持ちます。私はポリゴンを含む別のArrayListを持っており、それに基づいて、何かが変更された場合、このJTreeはそのリストを更新します。 JTreeでポリゴンを選択する場合は、ArrayListに接続できるように行を知り、そのポリゴンに変更したいものを変更する必要があります。私は 'DefaultMutableTreeNode'を拡張するのではなく、それを計算したアルゴリズムを持っている方が簡単だと思います。私は間違っている可能性がある。 – Eric
私の好みの解決策は、 'DefaultMutableTreeNode'を' Polygon'で管理するか、それが更新できるモデルへの参照を持っていることですが、それは私です:P ...基本的には、 'JTree'とあなたの既存モデルの間にある結束の量を最小限に抑えたいと思っています – MadProgrammer