C
Camino
Gast
Hallo,
seit 2 Tagen tüftel ich nun schon an einem Problem herum. Und zwar möchte ich in einer Datenbank Textbausteine speichern und diese dann in einer Swing-Anwendung als JTree anzeigen, da die Textbausteine verschiedenen Bereichen zugeordnet werden sollen.
Die Grundstruktur für die Datenbank (PostgreSQL) hatte ich mir so angelegt:
id - fortlaufende ID-Nummer (Primärschlüssel)
parent_id - ID-Nummer des Elternelementes
bezeichnung - Name/Kurzbezeichnung des Textbausteines bzw. des Bereiches
text - der Textbaustein selbst (falls Textbaustein; wenn Bereich, dann leer)
Um eine Baumstruktur zu erreichen, haben alle Elemente eine Parent-ID, damit sie in den Tree eingebaut werden können. Bei Knoten (Bereiche und Unterbereiche) bleibt das Feld 'text' leer, nur bei den Blättern steht der Text des Textbausteines in der Datenbank.
Diese Datenstruktur bilde ich in einer Klasse 'Textbaustein' ab:
Ich erstelle ein TreeModel, in dem eine ArrayList<Textbaustein> mit den Daten aus der Datenbank erstellt wird. Dieses TreeModel wird dann dem JTree im Konstruktor übergeben. Im Tree sollen die Bereiche angezeigt werden und aufklappbar sein, wenn es weitere Unter-Bereiche oder Textbausteine darin gibt. 'Textbausteine' ist der oberste und erste Bereich (root), unter den alle anderen Bereiche aufgeklappt werden können. Sieht in etwa so aus (soll erweiterbar sein):
Textbausteine (root)
|-- Briefe
| |-- Nachfragen
| | |-- Textbaustein 1
| | |-- Textbaustein 2
| |-- Mahnungen
| |-- Textbaustein 3
|-- E-Mails
|-- Bescheide
Ich schaffe es nun aber irgendwie nicht, über die Methoden im TreeModel die richtigen Daten aus dieser ArrayList dem JTree zu übergeben und anzeigen zu lassen.
So sieht mein TreeModel aus (in den Methoden steht evtl. etwas Murks drin, da ich da schon längere Zeit herumprobiert habe):
Ich bin mir jetzt nicht sicher, ob meine Grundstruktur in der Datenbank (mit ID und Parent-ID) überhaupt schon richtig und sinnvoll ist, oder ob nicht da schon der Fehler drin liegt. Das Auslesen aus der Datenbank und füllen der ArrayList klappt jedenfalls soweit. Problematisch wird es erst beim TreeModel, da ich nicht weiss, wie ich auf die Daten bzw. Objekt zugreifen muss.
Gruss
Camino
seit 2 Tagen tüftel ich nun schon an einem Problem herum. Und zwar möchte ich in einer Datenbank Textbausteine speichern und diese dann in einer Swing-Anwendung als JTree anzeigen, da die Textbausteine verschiedenen Bereichen zugeordnet werden sollen.
Die Grundstruktur für die Datenbank (PostgreSQL) hatte ich mir so angelegt:
id - fortlaufende ID-Nummer (Primärschlüssel)
parent_id - ID-Nummer des Elternelementes
bezeichnung - Name/Kurzbezeichnung des Textbausteines bzw. des Bereiches
text - der Textbaustein selbst (falls Textbaustein; wenn Bereich, dann leer)
Um eine Baumstruktur zu erreichen, haben alle Elemente eine Parent-ID, damit sie in den Tree eingebaut werden können. Bei Knoten (Bereiche und Unterbereiche) bleibt das Feld 'text' leer, nur bei den Blättern steht der Text des Textbausteines in der Datenbank.
Diese Datenstruktur bilde ich in einer Klasse 'Textbaustein' ab:
Java:
...
public class Textbaustein {
private int id;
private int parent_id;
private String bezeichnung;
private String text;
public Textbaustein() {
}
public Textbaustein(int id, int parent_id, String bezeichnung, String text) {
this.id = id;
this.parent_id = parent_id;
this.bezeichnung = bezeichnung;
this.text = text;
}
// hier folgen getter- und setter-Methoden...
...
Ich erstelle ein TreeModel, in dem eine ArrayList<Textbaustein> mit den Daten aus der Datenbank erstellt wird. Dieses TreeModel wird dann dem JTree im Konstruktor übergeben. Im Tree sollen die Bereiche angezeigt werden und aufklappbar sein, wenn es weitere Unter-Bereiche oder Textbausteine darin gibt. 'Textbausteine' ist der oberste und erste Bereich (root), unter den alle anderen Bereiche aufgeklappt werden können. Sieht in etwa so aus (soll erweiterbar sein):
Textbausteine (root)
|-- Briefe
| |-- Nachfragen
| | |-- Textbaustein 1
| | |-- Textbaustein 2
| |-- Mahnungen
| |-- Textbaustein 3
|-- E-Mails
|-- Bescheide
Ich schaffe es nun aber irgendwie nicht, über die Methoden im TreeModel die richtigen Daten aus dieser ArrayList dem JTree zu übergeben und anzeigen zu lassen.
So sieht mein TreeModel aus (in den Methoden steht evtl. etwas Murks drin, da ich da schon längere Zeit herumprobiert habe):
Java:
public class TreeModelTextbausteine
implements TreeModel {
private DBHandlerTextbausteine dbHandlerTextbausteine;
private ArrayList<Textbaustein> textbausteinListe;
public TreeModelTextbausteine() {
dbHandlerTextbausteine = new DBHandlerTextbausteine();
textbausteinListe = dbHandlerTextbausteine.getTextbausteinListe();
}
@Override
public Object getRoot() {
return textbausteinListe.get(0);
}
@Override
public Object getChild(Object parent, int index) {
Textbaustein t = (Textbaustein)parent;
return textbausteinListe.get(index);
}
@Override
public int getChildCount(Object node) {
Textbaustein t1 = (Textbaustein)node;
int count = 0;
for (Textbaustein t : textbausteinListe) {
if(t.getParentId() == t1.getId())
count++;
}
return count;
}
@Override
public int getIndexOfChild(Object parent, Object child) {
Textbaustein t1 = (Textbaustein)parent;
for (Textbaustein t : textbausteinListe) {
if(t == child)
return textbausteinListe.indexOf(t);
}
return -1;
}
@Override
public boolean isLeaf(Object node) {
Textbaustein t1 = (Textbaustein)node;
if (t1.getText().equals("") || t1.getText().isEmpty())
return false;
return true;
}
@Override
public void addTreeModelListener(TreeModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeTreeModelListener(TreeModelListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void valueForPathChanged(TreePath arg0, Object arg1) {
// TODO Auto-generated method stub
}
}
Ich bin mir jetzt nicht sicher, ob meine Grundstruktur in der Datenbank (mit ID und Parent-ID) überhaupt schon richtig und sinnvoll ist, oder ob nicht da schon der Fehler drin liegt. Das Auslesen aus der Datenbank und füllen der ArrayList klappt jedenfalls soweit. Problematisch wird es erst beim TreeModel, da ich nicht weiss, wie ich auf die Daten bzw. Objekt zugreifen muss.
Gruss
Camino