Swing JTree wird nicht angezeigt

Status
Nicht offen für weitere Antworten.

Shalimar

Mitglied
So, ich glaub eh, ich hab hier totale Wurst verzapft....
Aber wir sollen jedenfalls einen XML-Editor erstellen, der links noch ne TreeView-Komponente hat. Es geht jetzt erstmal nur um die GUI. Mein Menü ist noch nicht fertig, also kann das erstmal außer Acht gelassen werden. Und mein geplanter TreeView ist jetzt auch erstmal nur nen Test. Worauf ich eigentlich hinaus will, ist, dass der links eben nicht angezeigt wird, sondern nur ein ganz schmaler Streifen da ist:

Code:
package xmlEditor;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;

public class GUI

{

	JTextArea textArea;
	JMenuBar menuBar; JMenu menu; JMenuItem öffnen; JMenuItem speichern;
	JTree treeView;
	
	
	
	public JMenuBar createMenuBar()
	{
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);
        öffnen = new JMenuItem("Öffnen", KeyEvent.VK_T);
        öffnen.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        öffnen.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menu.add(öffnen);
        speichern = new JMenuItem("Speichern", KeyEvent.VK_T);
        speichern.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        speichern.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menu.add(speichern);
        
        return menuBar;
	}
	
	public JTree createJTree()
	{
		treeView = new JTree();
	    DefaultMutableTreeNode parent = new DefaultMutableTreeNode("Color", true);
	    DefaultMutableTreeNode black = new DefaultMutableTreeNode("Black");
	    DefaultMutableTreeNode blue = new DefaultMutableTreeNode("Blue");
	    DefaultMutableTreeNode nBlue = new DefaultMutableTreeNode("Navy Blue");
	    DefaultMutableTreeNode dBlue = new DefaultMutableTreeNode("Dark Blue");
	    DefaultMutableTreeNode green = new DefaultMutableTreeNode("Green");
	    DefaultMutableTreeNode white = new DefaultMutableTreeNode("White");
	    parent.add(black);
	    parent.add(blue);
	    blue.add(nBlue);
	    blue.add(dBlue);
	    parent.add(green );
	    parent.add(white);
	    JTree tree = new JTree(parent);
	    treeView.add(tree);
	    
	    
	    return treeView;
	}
	
	
	
    public Container createContentPane()
    {
    	JFrame xmlEditor = new JFrame ("XML Editor");
		Container inhalt = xmlEditor.getContentPane();
		inhalt.setLayout (new BorderLayout() );
		
		int w = Toolkit.getDefaultToolkit().getScreenSize().width;
		int h = Toolkit.getDefaultToolkit().getScreenSize().height;
		xmlEditor.setSize(w, h);
		xmlEditor.setVisible(true);
		
		textArea = new JTextArea();
	    JScrollPane sptextArea = new JScrollPane();
	    sptextArea.setViewportView(textArea);
	    
	    JScrollPane sptreeView = new JScrollPane();
	    sptreeView.setViewportView(treeView);
	    
	    inhalt.add(menuBar, BorderLayout.NORTH);
	    inhalt.add(sptextArea, BorderLayout.CENTER);
	    inhalt.add(sptreeView, BorderLayout.WEST);

	    return xmlEditor;
    }
	
	
    private static void createAndShowGUI() 
    {
        //Create and set up the window.
        JFrame xmlEditor = new JFrame("XML Editor");
        xmlEditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        GUI demo = new GUI();
        xmlEditor.setJMenuBar(demo.createMenuBar());
        xmlEditor.setContentPane(demo.createContentPane());

    }

    public static void main(String[] args) 
    {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() 
        {
            public void run() 
            {
                createAndShowGUI();


		
		

            }
        });
    }
}

Ich frage mich nun, wie man den denn dann in dem Frame angezeigt bekommen...
Könnte sein, dass der hier:
Code:
//Create and set up the content pane.
        GUI demo = new GUI();
        xmlEditor.setJMenuBar(demo.createMenuBar());
        xmlEditor.setContentPane(demo.createContentPane());
noch irgendwie mit angegeben werden muss? Ich hab jetzt aber in der API nichts gefunden, was mir weiterhilft...
 
niemand ruft
createJTree();
auf


und
setVisible(true);
erst am Ende nach Einfügen aller Komponenten aufrufen

edit:
du erzeugst übrigens zwei JFrame und fügst sie ineinander ein, das geht nicht gut
 
Zuletzt bearbeitet von einem Moderator:
Naja, ich sag ja, ich hab Wurst verzapft ;-)

Leider habe ich - wie unschwer zu erkennen sein dürfte - von JTrees null Ahnung.
Ich hab jetzt die Abänderungen bzgl. des doppelten Frames vorgenommen und setVisible ans Ende gesetzt. Leider weiß ich mit dem JTree immer noch nicht weiter. Tutorials haben mir bisher auch keine Lösung gebracht. Egal was ich mache, der Tree wird mir nicht angezeigt.

Ich poste einfach nochmal meinen aktuellen Code:

Code:
package xmlEditor;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class GUI2

{

	JTextArea textArea;
	JMenuBar menuBar; JMenu menu; JMenuItem öffnen; JMenuItem speichern;
	static JTree treeView;
	JScrollPane sptextArea, sptreeView;	
	
	
	public JMenuBar JMenuBar()
	{
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);
        öffnen = new JMenuItem("Öffnen", KeyEvent.VK_T);
        öffnen.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        öffnen.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menu.add(öffnen);
        speichern = new JMenuItem("Speichern", KeyEvent.VK_T);
        speichern.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        speichern.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menu.add(speichern);
        
        return menuBar;
	}
	
	public JTree JTree()
	{
	
	    DefaultMutableTreeNode parent = new DefaultMutableTreeNode("Color", true);
	    DefaultMutableTreeNode black = new DefaultMutableTreeNode("Black");
	    DefaultMutableTreeNode blue = new DefaultMutableTreeNode("Blue");
	    DefaultMutableTreeNode nBlue = new DefaultMutableTreeNode("Navy Blue");
	    DefaultMutableTreeNode dBlue = new DefaultMutableTreeNode("Dark Blue");
	    DefaultMutableTreeNode green = new DefaultMutableTreeNode("Green");
	    DefaultMutableTreeNode white = new DefaultMutableTreeNode("White");
	    parent.add(black);
	    parent.add(blue);
	    blue.add(nBlue);
	    blue.add(dBlue);
	    parent.add(green );
	    parent.add(white);
	    JTree tree = new JTree(parent);
	    treeView.add(tree);
	    tree.setSize(300, 600);
	    tree.setVisible(true);
	    
	    return treeView;
	}
	

	public Container createContentPane()
    {
    	JPanel contentPane = new JPanel(new BorderLayout());
    	contentPane.setOpaque(true);
		
		textArea = new JTextArea();
		textArea.setEditable(true);
	    sptextArea = new JScrollPane(textArea);
	    
	    sptreeView = new JScrollPane(treeView);
	    
	    contentPane.add(menuBar, BorderLayout.NORTH);
	    contentPane.add(sptextArea, BorderLayout.CENTER);
	    contentPane.add(sptreeView, BorderLayout.WEST);

	    return contentPane;
    }
	
	
    private static void createAndShowGUI() 
    {
        //Create and set up the window.
        JFrame xmlEditor = new JFrame("XML Editor");
		xmlEditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        GUI demo = new GUI();
        xmlEditor.setJMenuBar(demo.JMenuBar());
        xmlEditor.setContentPane(demo.createContentPane());
        
        //Display the Window
        int w = Toolkit.getDefaultToolkit().getScreenSize().width;
		int h = Toolkit.getDefaultToolkit().getScreenSize().height;
	    xmlEditor.setSize(w, h);
		xmlEditor.setVisible(true);

    }

    public static void main(String[] args) 
    {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() 
        {
            public void run() 
            {
                createAndShowGUI();	

            }
        });
    }
}

Ich weiß, dass der wahrscheinlich furchtbar ist...
 
niemand ruft
createJTree();
auf

topaktuell zu deinem neuen Code:

niemand ruft [die Methode]
JTree();
auf


nichtausgeführter Code hat keine Auswirkung auf ein Programm

--------

JTree tree = new JTree(parent);
treeView.add(tree);


treeView ist auch ein JTree,
JTree.add(JTree) ist bestimmt nicht so gut
 
Hm, okay, sehe ich ein.
Aber hinbekommen tu ich es trotzdem nicht.
Ich sehe jetzt zum Beispiel keinen Unterschied zwischen meiner JMenuBar()-Methode und der JTree()-Methode, das Menü ist aber da...
 
> xmlEditor.setJMenuBar(demo.JMenuBar());
hier wird JMenuBar() aufgerufen

vs

[.....................]
hier wird JTree() nicht aufgerufen

> new JScrollPane(treeView);
fragt nur das Klassenattribut ab, triggert aber keinen magischen Methodenaufruf oder so
 
Ah, blöd. Klar, ich hab ja erst in meinem ersten Post noch gefragt, ob da

xmlEditor.setJMenuBar(demo.createMenuBar());
xmlEditor.setContentPane(demo.createContentPane());

nicht noch was fehlt.

Aber ich muss einfach ganz blöd fragen, womit ich das denn nun aufrufe, weils bei mir nichts wie setJMenuBar nur eben für Trees gibt...
 
> sptreeView = new JScrollPane(treeView);

sptreeView = new JScrollPane(JTree());

oder deutlich schlechter

JTree()
sptreeView = new JScrollPane(treeView);

--------

generell Methoden klein schreiben!
 
Ah, OMG, Dankeschön!!!
War mal wieder nicht einfach mit mir ;-)

Ah, ja und Danke nochmal für den Hinweis mit den Methoden.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben