Problem mit JTree
-
Guten Abend!
habe folgendes Problem mit meinem JTree:
Habe ein panel (BorderLayout) bei dem West ein jtree ist und center ein anderes panel.
Wenn ich jetzt im tree was selektiere soll im center panel ein anderes panel angezeigt werden.
das problem ist folgendes: es wird nicht immer etwas angezeigt.public class panel_Formulare extends JPanel implements TreeSelectionListener { private JPanel p_panel; private JTree test_tree; private DefaultMutableTreeNode root; private DefaultMutableTreeNode ueberfuehrung; private DefaultMutableTreeNode ansuchen; public panel_Formulare() { p_panel = new JPanel(); this.setLayout(new BorderLayout()); createNodes(); createTree(); test_tree = new JTree(root); test_tree.setRootVisible(false); test_tree.addTreeSelectionListener(this); this.add(new JScrollPane(test_tree), BorderLayout.WEST); this.add(p_panel, BorderLayout.CENTER); } public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) test_tree.getLastSelectedPathComponent(); if (node.equals(ansuchen)) { p_panel = new panel_ansuchen(); } p_panel.validate(); } }
public void createNodes() { root = new DefaultMutableTreeNode("Formulare"); ueberfuehrung = new DefaultMutableTreeNode("Überführung"); ansuchen = new DefaultMutableTreeNode("Ansuchen"); }
public void createTree() { ueberfuehrung.add(ansuchen); root.add(ueberfuehrung); }
das sind nur auszüge aus meinem code, valueChanged sind noch ungefähr 40 if's und der tree hat auch noch einige einträge!
für eine schnelle antwort währe ich sehr dankbar!
btw: super forum... hat mir schon öfters geholfen! DANKE
-
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/SwingUtilities.html
Die Klasse SwingUtilities hat eine Methode namens "updateComponentTreeUI".
-
danke für die antwort, aber damit kann ich nichts anfangen... es funktioniert trotzdem nicht
-
if (node.equals(ansuchen)) { p_panel = new panel_ansuchen(); } p_panel.validate();
Ist das der gesamte Code, der das neue Panel "einfügen" soll? Dass das nicht funktioniert, ist ziemlich klar: du änderst nur die lokale Referenz von p_panel. Der Frame (genauer gesagt: das zuständige contentpane) erfährt aber von dieser lokalen Referenzänderung schlicht und einfach nichts - sondern zeigt weiterhin das alte an.
Was du machen könntest: p_panel als Zwischenpanel verwenden und im if es immer so handhaben:
if (node.equals(ansuchen)) { p_panel.removeAll(); p_panel.add(new panel_ansuchen()); repaint(); } p_panel.validate();
Übrigens: Klassennamen nach den SunCodingConventions immer mit einem großen Anfangsbuchstaben und ohne Unterstriche. Das selbe gilt für Variablen- und Attributnamen. (Ausnahme: Konstanten)
-
danke werd ich mal probiern!
und wegn den namen: unserer lehrer haben von der SunCodingConventions noch nie was gehört... und wenns nicht so gemacht wird wie der lehrer will passts nicht!