Ich suchte nach Antwort, aber war nicht in der Lage, etwas zu finden, um dies zu lösen. Ich habe zwei Array-Listen, die Strings enthalten, die sich dynamisch nach einem Klick auf einen Benutzer ändern, und das Erstellen von JTree, das Elemente aus einer Liste anzeigt, hängt von einem Typ in einer anderen Liste ab. Ich habe ein Problem, weil ich immer etwas in meiner Liste hinzufüge und lösche und brauche JTree, um diese Änderungen anzuzeigen. Es wird alle Elemente aus List korrekt hinzufügen, bis ich expandiere, danach ist es unmöglich, den Inhalt von JTree zu aktualisieren, zumindest für mich. Wenn ich meine Liste leer lasse, wird es so aussehen, als wäre sie zusammengebrochen, aber der Inhalt zeigt immer noch so wie er erweitert wurde, auch wenn er in der Konsole 0 ergibt. Wenn ich etwas zu meiner Liste hinzufüge, wird es hinzugefügt, aber nicht angezeigt. Im Grunde ist das Problem, Änderungen von JTree visuell zu zeigen.JTree dynamisch mit Arraylist Änderungen aktualisiert
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();
}
}
}
Ich denke, Sie möchten eine Menge Zeit damit verbringen, über den Teil ** model ** hier zu lesen. Das ** Modell ** verbindet die Daten und die visuelle Ansicht. Also, in der Theorie müssen Sie nur die Dinge richtig anschließen, um zu erreichen, wonach Sie suchen. – GhostCat