私は答えを探しましたが、これを解決するための何も見つかりませんでした。ユーザーがクリックした後に動的に変化するStringを含む2つの配列リストがあり、現在、あるリストの要素を表示するJTreeを作成することは、別のリストのある型に依存します。私は常に自分のリストに何かを追加したり削除したりするためにJTreeに変更が必要なので問題があります。リストからすべての要素を正しく追加するまでは、JTreeのコンテンツを更新することは不可能です。私のリストを空にすると、折りたたまれたように表示されますが、子の数が0のコンソールでも展開されているようにすべてのコンテンツが表示されています。リストに何かを追加すると、リストに追加されますが、表示されません。 基本的に問題は、JTreeの変更を視覚的に示すことです。JTreeがarraylistの変更で動的に更新する
public class JSelectedTree extends JPanel{
private JTree selectionTree;
private DefaultTreeModel treeModel;
public DefaultMutableTreeNode point;
public DefaultMutableTreeNode polygon;
public DefaultMutableTreeNode line;
public JSelectedTree() {
initGUI();
}
public void initGUI() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
point = new DefaultMutableTreeNode("Point");
polygon = new DefaultMutableTreeNode("Polygon");
line = new DefaultMutableTreeNode("Line");
root.add(point);
root.add(polygon);
root.add(line);
treeModel = new DefaultTreeModel(root);
selectionTree = new JTree(root);
selectionTree.setRootVisible(false);
selectionTree.setShowsRootHandles(false);
selectionTree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
JScrollPane scroll = new JScrollPane(selectionTree);
scroll.setBorder(BorderFactory.createTitledBorder("Selected"));
setLayout(new BorderLayout());
add(scroll, BorderLayout.CENTER);
}
public void resetTree(){
if(!MultiSelectTool.selectedObject.isEmpty()){
polygon.removeAllChildren();
point.removeAllChildren();
line.removeAllChildren();
treeModel.reload();
int n = MultiSelectTool.selectedObject.size();
for(int i = 0; i < n; i++){
if(MultiSelectTool.selectedCoords.get(i).contains("(((")){
DefaultMutableTreeNode child = new DefaultMutableTreeNode(MultiSelectTool.selectedObject.get(i));
treeModel.insertNodeInto(child, polygon, polygon.getChildCount());
}else if(MultiSelectTool.selectedCoords.get(i).contains("((")){
DefaultMutableTreeNode child = new DefaultMutableTreeNode(MultiSelectTool.selectedObject.get(i));
treeModel.insertNodeInto(child, line, line.getChildCount());
}else{
DefaultMutableTreeNode child = new DefaultMutableTreeNode(MultiSelectTool.selectedObject.get(i));
treeModel.insertNodeInto(child, point, point.getChildCount());
}
}
}else{
polygon.removeAllChildren();
point.removeAllChildren();
line.removeAllChildren();
treeModel.reload();
}
}
}
のようなものが必要な場合、私は思うDynamicTreeDemoからのいくつかの部分を取ることによって解決し、ここのコードですあなたはここで**モデル**の部分について読むのに十分な時間を費やしたいと思っています。 **モデル**はデータと視覚的なビューを接続します。だから、理論的には、あなたが探しているものを達成するために物事を正しく接続する必要があります。 – GhostCat