immer Problem mit Eingabe durch JTextField und JTree

zz0312

Grünschnabel
Hallo,

ich habe auf linken Seite einen JTree und auf der rechten Seite einen JPanel mit 3 JTextField und einen JButton(heisst "More")darauf, und ich möchte folgendes machen:

Wie untenliegende Abbildung, Knoten "erstes mal" verweist auf die erste Eingabeszene, nachdem Eingabe können die
Texte in JTextField durch Drücken den "More" Button gelöscht werden, damit man wieder in den JTextField irgendwas eintippen kann, und gleichzeitig auf der linken Seite wird einen Knoten "zweites mal", der quasi auf die zweite
Eingabedaten verweist, erzeugt und in den JTree hinzugefügt. Wenn man jetzt auf "erstes mal" klickt, wird die erste Eingabetexte wieder in JTextField erscheinen.


------------------------------------------------------
o--erstes mal | TextField1------------
o--zweites mal | TextFiled2------------
| TextFiled3------------
|
| --------
| |More|
-------

Wer kann mir dabei helfen? Vielen Dank
 
Hallo,

ich poste mal die Code.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24



// Auf der linken Seite
public class TreePanel extends JPanel{

TreePanel(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode author1 = new DefaultMutableTreeNode("Author1");
DefaultMutableTreeNode author2 = new DefaultMutableTreeNode("Author2");
DefaultMutableTreeNode author3 = new DefaultMutableTreeNode("Author3");
........................}}

//Auf der rechte Seite
public class Panel0 extends JPanel {

Panle0(){
JLabel jLabel4 = new JLabel("Name:");
this.add(jLabel4);
JTextField jTextField1 = new JTextField(30);
this.add(jTextField1);
//weitere JTextField
.............................
JButton moreButton = new JButton("More");
this.add(moreButton); }}



Knoten "Author1" verweist auf die erste Eingabeszene, nachdem Eingabe können die Texte in JTextField durch Drücken den "More" Button gelöscht werden, damit man wieder in den JTextField irgendwas eintippen kann, und gleichzeitig auf der linken Seite wird einen Knoten "Author2", der quasi auf die zweite Eingabedaten verweist, erzeugt und in den JTree hinzugefügt, analog ist der "Author3". Wenn man jetzt z.B auf "Auhtor1" klickt, wird die erste Eingabetexte wieder in JTextField erscheinen. (es wird passieren, wenn man mit den Eingaben ganz fertig ist und möchte nun mal gucken was er eingetippt hat, kann er durch den Knoten in JTree all Eingabedaten auf rechter Seite erscheinen lassen)

Was jetzt funktioniert sind folgendes:

ein Knoten "Author1" liegt in JTree, und wenn man darauf klickt, wird auf der rechten Seite das Panel mit JTextField und More Button angezeigt.

was ich nicht realisieren kann sind folgendes:

1. Nachdem ersten mal Eingabe einen Knoten(z.B Author2) in JTree durch Klick auf MoreButton einzufügen.


Nehmen wir an, dass wir drei male in den JTextField eingegeben haben und drei Knoten(Author1, Author2, Author3) in JTree eingefügt.

2. durch Klick auf Knoten Author1/Author2 das erste/zweite mal eingegebenen Texte wieder in JTextField angezeigt werden.
 
zz0312 hat gesagt.:
was ich nicht realisieren kann sind folgendes:

1. Nachdem ersten mal Eingabe einen Knoten(z.B Author2) in JTree durch Klick auf MoreButton einzufügen.


Nehmen wir an, dass wir drei male in den JTextField eingegeben haben und drei Knoten(Author1, Author2, Author3) in JTree eingefügt.

2. durch Klick auf Knoten Author1/Author2 das erste/zweite mal eingegebenen Texte wieder in JTextField angezeigt werden.

Hi ho,
also ich bin mir nicht sicher was Du willst, aber wenn ich Dich richtig verstehe willst Du einen Tree dynamisch erweitern und weiterhin ein aus dem Tree selektierten Knoten im Textfeld anzeigen, richtg?
Es ist schon einige Zeit her, dass ich mir JTrees gearbeitet habe. Wichtig ist, dass Du in Komponenten in denen man selektieren kann normalerweise Selection-Listener anmelden kannst um Ereignisgesteuert von einer Selektions-Änderung windzubekommen. Dieser Selektionlistener muß halt dann das Textfeld befüllen.
Der JTree hat auch ein Model (s. MVC-Pattern) , Ich gehe davon aus, das dort irgendwo sicher eine Methode gibt, die einem Knoten weitere Knoten anfügen kann, vorausgesetzt es handelt sich hierbei um ein veränderbares Modell.

viel Glück

Takidoso
 
Hallo,

du hast richtig verstanden was ich meine, und ich habe auch kapiert was du meinst, Problem ist wie kann man realisieren dass der Selektionlistener das Textfeld befüllt? Der soll, wie ich denke, den entprechenden EingabeTexte speichern, oder? kannst du mir ein Beispiel geben?
 
zz0312 hat gesagt.:
Problem ist wie kann man realisieren dass der Selektionlistener das Textfeld befüllt? Der soll, wie ich denke, den entprechenden EingabeTexte speichern, oder? kannst du mir ein Beispiel geben?

Also es gibt für den JTree folgendes Interface

public interface TreeSelectionListener extends EventListener
{
/**
* Called whenever the value of the selection changes.
* @param e the event that characterizes the change.
*/
void valueChanged(TreeSelectionEvent e);
}

Dieses implementierst Du entweder als benamte Klasse oder als Anonymen Adapter.
wichtig ist, dass die Klasse die Möglichkeit hat Dein Textfeld zu befüllen. Das geht am einfachsten indem dieser von Dir implementierte Listener eine Unterklasse Deines Panels auf dem der Tree und das besagte Textfeld untergebracht sind ist. Alternativ kannst Du auch dem Listener z.B. in einer Methode die Referenz Deines Textfeldes mitgeben.

um den selektierten Knoten herauszufinden schau Dir den TreeSelectionEvent an, er beherbergt unter anderem den aktuellen TreePath. die Routine getNewLeadSelectionPath() gibt Dir den aktuellen Pfad.

vielleicht hilft Dir das schon weiter

viel Glück

Takidoso
 
vielen Dank für deine nette Hilfe, ich würde erstmal nach deinen Tipps versuchen zu implementieren. Wenn ich wieder Problem habe, melde ich mich wieder.

Gruss

zz0312
 
Grüß Dich,
mir fällt gerade auf, dass ich möglicherweise ungschickt und nicht eindeutig ausgedrückt habe.
Unterklasse sollte besser eingebettete Klasse heißen.
Außerdem kannst Du auch in Deinem Listener die selektierte Komponente glaube ich auch mit dem JTree selbst herausbekommen.

viel Glück

Takidoso
 
Zurück