Treeviewer aus tabelle

schuetzejanett

Erfahrenes Mitglied
hallo,

ich habe eine Tabelle( also eine Arraylist deren Einträge elemente der Klasse Auftrag sind)
Die Klasse Auftrag speichert zu jedem Auftrag (den Kunden, die Auftragsart, die bezahlart, ob die artikel ins Ausland geliefert werden sollen und noch einige andere Dinge.

Nun grübel ich schon eine ganze Weile wie ich daraus eine Baumstruktur bekomme für einen Treeviewer. ich bin schon soweit das ich sage Auftragsart ist "Root" des Baumes, dann Kommt die bezahlart die als Parent die Auftragsart hat, dann das Auslandszeichen mit Parent Bezahlart und dann die Kundennamen mit parent auslandszeichen.

Allerdings weiß ich jetzt nicht so recht weiter. Wie mache ich jetzt aus der tabelle den baum?
 
das ist eigentlich ganz einfach
du verwendest einen Baum der als kind eine Tabellenzeile hat (also kann mehrere Spalten haben)

früher gab es TableTree, der ist mittlerweile deprecated

man kann aber einfach dem TreeViewer einen Tree mit mehreren TreeColumns hinterlegen, ich musste für eine Anwendung so ein Teil einbauen

Stichwörter:
Tree, TreeViewer, LabelProvider, ContentProvider, TreeColumns

Wie gesagt, TableTreeViewer ist mittlerweile aufgrund des hinterlegten TableTree Deprecated, ich habe jedoch kein gutes beispiel eines TreeViewers mit multiple Columns gefunden

schau dir stattdessen einfach einen TableTree an, die benützung für deinen Tree ist genau die selbe http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/DemonstratesTableTreeViewer2.htm

anstatt des TableTreeViewers verwendest du TreeViewer, und anstatt TableColumns nimmst du TreeColumns, der Rest ist ziemlich gleich

mfg
 
Zuletzt bearbeitet:
hallo,

danke für den tipp meinte das aber ein bischen anders.
Also ich möchte so in etwa so etwas hier bekommen

Code:
Bauminhalt:
-Telefon
     -Lastschrift
           -Deutschland
                -67345
                -34578
           +Schweiz
           +Schweden
     +Rechnung
+Internet

Tabelleninhalt:
Auftragsart  Bezahlart                 land                            Kundenummer 
telefon         Lastschrift               Deutschland                67345
telefon         Lastschrift               Deutschland                34578
...


Und unter rechnung könnte es genau solche unterpunkte wieder geben.
und wenn ich dann auf einen eintrag doppelt klicke sollen dann in einer anderen View die details dazu erscheinen. Wie ich das mache weiß ich ja so in etwa aber eben nicht wie ich die obige striktur bekomme
 
Zuletzt bearbeitet:
dazu musst du einen geeigneten contentprovider schreiben

du machst TreeViewer, setzt Label-, Contentprovider, das Model
beim Contentprovider sind dieses methoden zu überschreiben, und das ist jetz mal nur beispiel haft wies geht

als link kann ich dir wieder den link von oben empfehlen, da siehst wie ein contentprovider aussieht, du kannst aber auch noch hier schauen

http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/Tree.htm

public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Auftrag) {
return Array[Lastschriften];
} else if (parentElement instanceof Model) {
...
} else
return EMPTY_ARRAY;
}

public Object getParent(Object element) {
if (element instanceof Auftrag) {
return null;
} else if (element instanceof Bezahlart) {
return Auftrag;
} else if (element
....
}

public boolean hasChildren(Object element) {
...
}
 
Hallo,

komme leider erst jetzt wieder dazu mich damit zu beschäftigen. Ich habe mir deine links und auch die beispiele noch mal angeschaut und weiß jetzt was ich für methoden überschreiben muss
Hab immer noch ein paar Probleme. Und zwar was mache ich wenn in den einzelnen spalten keine objekte sondern strings, bzw boolean stehen und wie mache ich das mit den arrays bei getChildren ich weiß zwar wie ich mir alle auftragsarten ausles und in ein Array speicher aber wie ich das dann auf der nächsten ebene weiter mache weiß ich nicht weil da ja dann nicht nur die Aufrtagsart sondern auch die bezahlart stimmen müssen muss ich dann beides noch mal abfragen aus meiner arraylist oder wie ist das? In den bsp. sind das ja immer ganze objekt die einen verweis haben zu wem sie gehören. doch bei mir ist das leider nur eine arraylist die teilweise aus objekten(ohne verweis auf kinder bzw parents sondern nur id und name) , aber auch as strings und booleans bzw integerwerten besteht)
 
grundsätzlich ist der Datentyp den du in ein feld reinschreibst egal, da immer toString() von dem Objekt aufgerufen wird

das ganze ist mal simpel auf readonly wenn du nur einen Tree hernimmst

wennst du dann einem Feld einen CellEditor (TextCellEditor, oder selbst geschriebene z.bsp. IntCellEditor etc) hinzufügst, wird das ganze auch veränder bar

und nun nochmal zu der struktur:
ich weiß nicht genau wie du das haben willst, aber probiers einfach mal aus, bissl probieren, die beispiele verstehen

es ist klar dast das nicht sofort so aussieht wie mans vielleicht gern hätte, und kann auch _sehr_ viel zeite kosten :)

hier ein paar hinweise:
sagen wir dein Datenmodel heißt Model
dann gibts noch Telefon, Internet, Auftrag, Zahlungsart

zuerst ist halt immer so, das du die children liefern musst, so in der richtung (was ich mir jetz nicht mehr sicher bin, ist ob du immer ein array liefern musst,oder ob ein objekt auch reicht, aber ich glaube ein array)

die schreibweise array[...]ist natürlich nur sehr abstrakt, aber für das beispiel reicht es

Java:
if (obj instanceof Model) 
  return array[Telefon, Internet];
...

zu deiner Frage, wie du dann zu einem Telefon den richtigen Auftrag kriegst, oder zu einem Auftrag die Zahlungsart

Java:
else if (obj instanceof Telefon) {
  Telefon tempTelefon = (Telefon) obj;
  return array[tempTelefon.getAuftrag()];
}
else if (obj instanceof Auftrag) //verkürzt
  return array[((Auftrag)obj).getZahlungsart()];
...


hoffe, das hilft dir weiter

mfg
 
Zuletzt bearbeitet:
Zurück