JTree wird nicht dargestellt

Hallo,

ich versuche grade mich mit dem JTree auseinanderzusetzen…und er will nicht so wie ich es will. Es wird in der Gui nur ein kleiner Punkt dargestellt, so als ob der Tree leer wäre…viellecith befülle ich ihn falsch. ich hoffe Ihr könnt mir helfen.

Vielen Dank

Die Erzeugung und Einbindung:

//Tree
JScrollPane treePane = new JScrollPane();
ActionTree tree = new ActionTree();
treePane.add(tree);

//Zusammensetzen
getContentPane().setLayout(new GridBagLayout());
GridBagConstraints mainConstraints = new GridBagConstraints();
mainConstraints.gridwidth = GridBagConstraints.REMAINDER;
mainConstraints.gridwidth = 2;
mainConstraints.insets = new Insets( 5, 5, 5, 5);
getContentPane().add(treePane, mainConstraints);
getContentPane().add(controls, mainConstraints);

Die Klasse ActionTree:

public class ActionTree extends JTree{

public ActionTree(){
super(createTree());
}

private static TreeNode createTree(){

DefaultMutableTreeNode root = new DefaultMutableTreeNode( „Wurzel“ );

DefaultMutableTreeNode letters = new DefaultMutableTreeNode( „Buchstaben“ );
DefaultMutableTreeNode digits = new DefaultMutableTreeNode( „Zahlen“ );

DefaultMutableTreeNode letterA = new DefaultMutableTreeNode( „A“ );
DefaultMutableTreeNode letterB = new DefaultMutableTreeNode( „B“ );
DefaultMutableTreeNode letterC = new DefaultMutableTreeNode( „C“ );

DefaultMutableTreeNode digit1 = new DefaultMutableTreeNode( „1“ );
DefaultMutableTreeNode digit2 = new DefaultMutableTreeNode( „2“ );
DefaultMutableTreeNode digit3 = new DefaultMutableTreeNode( „3“ );

letters.add( letterA );
letters.add( letterB );
letters.add( letterC );

digits.add( digit1 );
digits.add( digit2 );
digits.add( digit3 );

root.add( letters );
root.add( digits );

return root;
}

Die toString von tree kurz vorm einbinden:
general.ActionTree[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=16777576,maximumSize=,minimumSize=,preferredSize=,editable=false,invokesStopCellEditing=false,largeModel=false,rootVisible=true,rowHeight=0,scrollsOnExpand=true,showsRootHandles=false,toggleClickCount=2,visibleRowCount=20]

Hallo,

ohne dass ich jetzt deinen Code kompiliert habe, wundert mich erstmal eines:

getContentPane().add(treePane, mainConstraints);
getContentPane().add(controls, mainConstraints);

Hier fügst du beide Male verschiedene Komponenten in dein ContentPane, verwendest aber beide Male die gleichen Constraints. Daher vermute ich, dass dein Tree schon mal gar nicht angezeigt werden kann.

Ich habe schon Jahre nix mehr mit GridBagLayout etc. gemacht, da ich es einfach unpraktisch und schwer verständlich finde. Daher weiß ich auch nicht recht, was deine Constraints genau bezwecken.

Hast du schon mal probiert, den Tree mit einem BorderLayout anzuzeigen? Geht es dann?

Also

getContentPane().setLayout(new BorderLayout());
getContentPane().add(treePane, BorderLayout.CENTER);

Geht das?

Ich denke mal, dass du an den Constraints spielen musst.

Ciao, Bill

Hi,

ich hab das mal ausprobiert, es klappt aber nicht. Mit BorderLayout, Treepane West und Controls Center wird ein kleiner Streifen am linken Rand gezeichnet, also wieder so, als hätte er nix darzustellen…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Mmh, komisch.
Probier mal den Tree zu verwenden ohne ein Model reinzusetzen. Dann verwendet er ein Standard-Model. Wenn du dann was siehst, dann liegt es an deinem Aufbau der Knoten. Sah aber auf den ersten Blick ganz gut aus.

Ciao

Hat leider auch nicht gefunzt…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Schade. Aber das hier funzt bei dir auf jeden Fall:

public static void main(String[] args) throws Exception
{
 JFrame frame = new JFrame();
 frame.setBounds(0, 0, 800, 600);

 Container contentPane = frame.getContentPane();

 contentPane.setLayout(new BorderLayout());
 contentPane.add(new JTree(), BorderLayout.CENTER);

 frame.setVisible(true);
 frame.setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
}

Wenn das jetzt nicht funktioniert, dann stimt irgendwas mit deiner Installation nicht :frowning:

hm, hab grad mal nen test nur mit deinem Aufruf und meinem Actiontree gemacht, das funktioniert einwandfrei…
nur dann raff ich den unterschied zu meinem Aufruf nicht…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Habs gefunden…ich weiß nicht warum aber der Fehler liegt im ScrollPane auf den ich den Tree lege…
Wenn ich den Tree direkt reinsetze wird er korrekt angezeigt. Benutze ich das Scrollpane hab ich wieder nur nen kleinen Punkt…
Kann man eine Scrollpane falsch benutzen?

Kann man eine Scrollpane falsch benutzen?

Ja, jetzt seh ich es:
Du setzt deinen Tree vermeintlich mit add() in das ScrollPane.
Richtig wäre aber setViewPortView() oder direkt im Konstruktor, was dem gleich kommt.

Siehe dazu auch die Doku des JScrollPane.

Ciao, Bill

oh mann, da wär ich nie drauf gekommen…
sitzt jetzt im Konstruktor und läuft wie ne eins.

Danke!!!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]