JTree, Knoten mehrmals verwenden

The_God

Aktives Mitglied
Hallo Leute,

ich möchte einen Knoten mehrmals in einem JTree verwenden (keine neue Instanz)


B
|..C
|.....A
D
| ... A
E
|.....A

Problem ist nun das "A" nur unter "E" angezeigt wird. Erzeuge ich "A" jedoch jeweils neu dann funktioniert es. A möchte ich aber nur eine Instanz haben da Db-Zugriff.

Nachfolgend der Quellcode

Projektliste welche Knoten C,D,E ... erzeugt
Code:
package myjobadmin.MyProjects;

import myjobadmin.MyDatabase.*;
import java.sql.ResultSet;
import myjobadmin.MyProjects.*;
import java.util.Vector;
import javax.swing.tree.DefaultMutableTreeNode;
import myjobadmin.MyAssemblies.MyMainAssemblyList;
import myjobadmin.MyOutprint;


public class MyProjectList {
  private MyDatabase mdb;
  private Vector data;
  private DefaultMutableTreeNode root;
  private MyMainAssemblyList mainAssList;

  /* Konstruktor (ohne BG) */
  public MyProjectList(MyDatabase _mdb) {
    MyOutprint.print(0, this, "Konstruktor ohne BG wird gestartet");
    this.mdb = _mdb;

    this.root = new DefaultMutableTreeNode("Projekte");

    this.mainAssList = null;

    this.init();
  }

  /* Konstruktor (mit BG)*/
  public MyProjectList(MyDatabase _mdb, MyMainAssemblyList _mainAssList) {
    MyOutprint.print(0, this, "Konstruktor mit BG wird gestartet");
    this.mdb = _mdb;

    this.root = new DefaultMutableTreeNode("Projekte");

    this.mainAssList = _mainAssList;

    this.init();
  }

  /* Initialisierung */
  private void init(){
    try{
      // hier Aktualität prüfen

      this.readProjectsFromDb();
    }catch(Exception e_init){

    }
  }

  /* Projekte aus Datenbank auslesen */
  private void readProjectsFromDb() throws Exception{
    MyOutprint.print(1, this, "readProjectsFromDb() wird gestartet ...");

    String strSQL = "SELECT * FROM myprojectlist ORDER BY Projektnummer ASC";

    ResultSet rstData = mdb.executeQueryRST(strSQL);

    // Spalten
    int cols = rstData.getMetaData().getColumnCount();
    String[] columnNames = new String[cols];
    for(int i=0; i<cols; i++) columnNames[i] = rstData.getMetaData().getColumnName(i+1);

    // Daten (sortiert nach Projektnummer)
    this.data = new Vector();
    int projectNumber;
    Object data[];;
    rstData.beforeFirst();
    int c=0;

    while(rstData.next()){
      projectNumber = rstData.getInt("Projektnummer");
      data = new Object[cols];
      for(int j=0; j<cols; j++){
        data[j] = rstData.getObject(j+1);
      }

      if( this.mainAssList != null ){
        this.data.add(new MyProject(projectNumber, columnNames, data, this.mainAssList) );
      } else
        this.data.add(new MyProject(projectNumber, columnNames, data) );

      // Zu Knoten hinzufügen
      this.root.add( ((MyProject)this.data.get(c)).getNode() );
      c++;
    }
  }

  /* Knoten */
  public DefaultMutableTreeNode getNode(){
    return this.root;
  }
}

Code für die jeweiligen Knoten C,D,E hier wird A als Child element eingefügt
Code:
package myjobadmin.MyProjects;

import myjobadmin.MyOutprint;
import javax.swing.tree.DefaultMutableTreeNode;
import myjobadmin.MyAssemblies.*;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2011</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class MyProject {
  private Object[] propertyValues;
  private String[] propertyNames;
  private int projectNumber;
  private DefaultMutableTreeNode node;
  private MyMainAssemblyList mainAssList;
  private DefaultMutableTreeNode nodeChild;

  /* Konstruktor */
  public MyProject(int _projectNumber, String[] _propertyNames, Object[] _propertyValues) {
    this.propertyNames = _propertyNames;
    this.propertyValues = _propertyValues;
    this.projectNumber = _projectNumber;

    // Baugruppen (hier keine)
    this.mainAssList = null;

    this.node = new DefaultMutableTreeNode(this);
  }

  /* Konstruktor */
  public MyProject(int _projectNumber, String[] _propertyNames, Object[] _propertyValues, MyMainAssemblyList _mainAssList) {
    this.propertyNames = _propertyNames;
    this.propertyValues = _propertyValues;
    this.projectNumber = _projectNumber;

    // Baugruppen
    this.mainAssList = _mainAssList;

    this.node = new DefaultMutableTreeNode(this);
    this.node.add( this.mainAssList.getTree() );
  }

  /* Projektnummer */
  public int getProjectNumber(){
    return this.projectNumber;
  }

  /* Eigenschaft */
  public Object getPropValue(String _propertyName){
    MyOutprint.print(1, this, "getPropValue() für \""+_propertyName+"\" wird gestartet ...");
    for(int i=0; i<this.propertyNames.length; i++)
      if(propertyNames[i].equals(_propertyName)) return this.propertyValues[i];
    return null;
  }

  /* Knoten */
  public DefaultMutableTreeNode getNode(){
    return this.node;
  }
}

Hat jemand eine Idee warum "A" nur immer an der letzten Position angezeigt wird und was ich anstellen muss ohne jedesmal "A" neu zu erzeugen.

Danke schon mal
 

DanZ

Bekanntes Mitglied
Ich befürchte, so wie du das machst funktioniert das garnicht. Wenn du zu einer DefaultMutableTreeNode eine Childnode addest, dann entfernt sie diese Childnode automatisch aus allen anderen Nodes in denen sie evt. schon vertreten ist.
Allerdings seh ich auch kein Problem damit für jeden Baumeintrag eine neue TreeNode zu erstellen. Du kannst ja für jede die selbe Instanz von MyProjekt verwenden, damit hast du die Identität des eigentlichen Modellobjektes gewahrt und dein Problem gelöst :)
 

The_God

Aktives Mitglied
hm, wie stelle ich es an das ich das Objekt kopiere also eine neue instanz erstelle ohne wieder die Daten aus der Db auszulesen?
 

Michael...

Top Contributor
Grundsätzlich ist Dein Klassenaufbau etwas merkwürdig und für mich aktuell noch schwer durchschaubar. Warum gibt ein MyProject Objekt einen TreeNode zurück und MyMainAssemblyList kann sogar einen kompletten JTree zurückgeben?
Grundsätzlich sollte man Daten und Darstellung bzw. das Darstellungmodell trennen. Auf der einen Seite baut man (bei Bedarf) ein sauberes Datenmodell auf, auf der anderen Seite baut man (auf dem Datenmodell) die Darstellung auf. Hier scheint mir einiges durchmischt zu sein.
Außerdem sehr unschön: globale und lokale Variablen mit dem selben Namen
Code:
data
bei denen es sich zusätzlich auch noch um unterschiedliche Typen handelt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
C Knoten anzeigenb eim DnD in einem JTree AWT, Swing, JavaFX & SWT 4
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
Z Jtree Knoten ändern AWT, Swing, JavaFX & SWT 5
S JTree - Knoten mit animiertem GIF/Icon AWT, Swing, JavaFX & SWT 5
algorismi Knoten im JTree deaktivieren AWT, Swing, JavaFX & SWT 4
B JTree - pro Knoten kann nur ein Blatt eingefügt werden AWT, Swing, JavaFX & SWT 5
G JTree Knoten ein / ausblenden AWT, Swing, JavaFX & SWT 3
P JTree Knoten schliessen AWT, Swing, JavaFX & SWT 16
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
G JTree: mehrere Knoten selektieren! AWT, Swing, JavaFX & SWT 2
S JTree, Knoten anhand eines Pfades öffnen? AWT, Swing, JavaFX & SWT 2
masta // thomas JTree - Knoten ausblenden. AWT, Swing, JavaFX & SWT 3
S Blätter oder Knoten im JTree ordnen AWT, Swing, JavaFX & SWT 3
D JTree - Knoten einfügen und automatisch in den Editiermodus AWT, Swing, JavaFX & SWT 2
G JTree -- Node nach ändern in anderen Knoten AWT, Swing, JavaFX & SWT 15
L nur den JTree Knoten auf der Console ausgeben? AWT, Swing, JavaFX & SWT 6
W JTree, bei Drag Over über den Knoten "markieren" AWT, Swing, JavaFX & SWT 3
S JTree hinzugefügte Knoten anzeigen AWT, Swing, JavaFX & SWT 9
K Frage zu einem älteren Beitrag: JTree letzter Knoten auswähl AWT, Swing, JavaFX & SWT 2
G Knoten im Jtree mit unterscheidlichen Farben darstellen AWT, Swing, JavaFX & SWT 5
S Knoten im JTree hinzufügen/löschen mit eigenem Jtree AWT, Swing, JavaFX & SWT 8
R JTree: TreeCellRenderer und Selektion eines Knoten AWT, Swing, JavaFX & SWT 10
G JTree - einzelnen Knoten löschen AWT, Swing, JavaFX & SWT 11
M Freiraum zwischen Knoten im JTree AWT, Swing, JavaFX & SWT 14
B Sichtbare Knoten im aktuellen Viewport eines JTree AWT, Swing, JavaFX & SWT 4
P JTree Knoten Öffnen - PER Programm AWT, Swing, JavaFX & SWT 5
D Knoten in JTree ausblenden. AWT, Swing, JavaFX & SWT 12
M JTree - Wie kann man einen einzelnen Knoten deselektieren? AWT, Swing, JavaFX & SWT 3
T Knoten in Jtree anders darstellen AWT, Swing, JavaFX & SWT 2
P JTree: Alle Knoten geöffnet anzeigen AWT, Swing, JavaFX & SWT 2
M Einen Knoten im JTree zusammenklappen? AWT, Swing, JavaFX & SWT 6
M JTree: Wie einen Knoten editieren? AWT, Swing, JavaFX & SWT 5
X JTree: Selektion nach dem Entfernen von Knoten AWT, Swing, JavaFX & SWT 2
W JTree Knoten oder Blatt AWT, Swing, JavaFX & SWT 3
W JTree löschen & überprüfen von Knoten oder Blatt AWT, Swing, JavaFX & SWT 3
W JTree Knoten irgendwo hinzufügen AWT, Swing, JavaFX & SWT 2
FrittenFritze JTree, LazyLoading und "Rückwärtstraversion" AWT, Swing, JavaFX & SWT 3
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
Z Swing JTree DefaultMultipleTreeNode Repräsentation ändern AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
W Swing Anzeigefehler bei JTree AWT, Swing, JavaFX & SWT 1
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
S JRadioButton und JCheckBox im JTree AWT, Swing, JavaFX & SWT 14
H Swing JTree: Zählt der rootNode mit? AWT, Swing, JavaFX & SWT 2
krgewb Swing JTree - Farbe von nodes ändern AWT, Swing, JavaFX & SWT 4
R JTree behandeln AWT, Swing, JavaFX & SWT 2
U dynamisches JTree erstellen AWT, Swing, JavaFX & SWT 2
J JTree updaten AWT, Swing, JavaFX & SWT 2
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
T JTree mit Symbolen? AWT, Swing, JavaFX & SWT 8
R Anfängerfrage: Ansichten des JTree AWT, Swing, JavaFX & SWT 1
H Swing JTree Minimumgröße AWT, Swing, JavaFX & SWT 2
F Swing JTree + DiffUtils // Markierung Nodes aufheben AWT, Swing, JavaFX & SWT 2
I JTree wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Swing JTree AWT, Swing, JavaFX & SWT 4
M Nodes in JTree nicht anzeigen AWT, Swing, JavaFX & SWT 0
T JTree mit Cloud verbinden AWT, Swing, JavaFX & SWT 0
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
J Auf Dateien in JTree zugreifen AWT, Swing, JavaFX & SWT 15
F jTree.startEditingAtPath(path); funktioniert nicht bei eigenem CellEditor? AWT, Swing, JavaFX & SWT 8
D Swing JTree Steuerung AWT, Swing, JavaFX & SWT 11
S Swing JTree verwirrt mich AWT, Swing, JavaFX & SWT 2
T JTree - Elemente mit Doppelklick auswählen AWT, Swing, JavaFX & SWT 6
J JTree speichern AWT, Swing, JavaFX & SWT 4
N Swing JTree TreeCellRenderer mit html und automatischen Zeilenumbruch AWT, Swing, JavaFX & SWT 8
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
B JTree mit Ordneransicht in JPanel einbinden AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
M Swing JTree: Wie kann ich die Hintergrundfarbe der selection ändern?!?! AWT, Swing, JavaFX & SWT 7
D Mehrmals auf Node im JTree klicken AWT, Swing, JavaFX & SWT 2
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
N Swing FileFilter lässt JTree sich nicht öffnen AWT, Swing, JavaFX & SWT 2
X Swing 2 TreeModel und ein JTree synchronisieren AWT, Swing, JavaFX & SWT 3
N Swing JTree TreePath zu Windows Pfad? AWT, Swing, JavaFX & SWT 2
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2
V Swing JTree - Umbenennen selbst handlen. AWT, Swing, JavaFX & SWT 2
E Übergebenem JTree Blätter hinzufügen AWT, Swing, JavaFX & SWT 2
E Wert eines selektierten Knotens in einem JTree auslesen AWT, Swing, JavaFX & SWT 3
A Swing JTree - Nodes expanden AWT, Swing, JavaFX & SWT 2
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
B JTree AWT, Swing, JavaFX & SWT 9
T Menüacceleratoren verschwinden bei JTree AWT, Swing, JavaFX & SWT 5
1 Swing JTree collapse child nodes AWT, Swing, JavaFX & SWT 4
B JTree - sehr individuell AWT, Swing, JavaFX & SWT 3
G Swing JTree - Verbindungslinien entfernen AWT, Swing, JavaFX & SWT 4
A Swing Herausfinden ob bei JTree Klick auf "+"/"-" anahnd x,y AWT, Swing, JavaFX & SWT 2
S Swing JTree und seine Listener... AWT, Swing, JavaFX & SWT 4
L Swing JTree wird nicht selektiert AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben