Größe neu anpassen und Panel aktualisieren

Polli

Mitglied
Hallo alle zusammen,

ich habe mal wieder eine Frage.

Soweit ist nun mein Programm...
PHP:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;



public class Hilfe 
{
	JTree tree 						 = new JTree();
	JFrame frame			 		 = new JFrame();
    static JPanel a1				 = new JPanel();
    static JPanel a2				 = new JPanel();
    static JPanel a3				 = new JPanel();
    static JPanel a4				 = new JPanel();
    static JPanel a5				 = new JPanel();
    static JPanel a6				 = new JPanel();
    static JPanel a7				 = new JPanel();
    static JPanel a8				 = new JPanel();
    static JPanel a9				 = new JPanel();
    static JPanel a10				 = new JPanel();
    static JPanel a11	 			 = new JPanel();
    static JPanel export_	 		 = new JPanel();
    static JPanel import_			 = new JPanel();
    static JPanel konfiguration	 	 = new JPanel();
    static JPanel tabelle			 = new JPanel();
//    JPanel a1	 = new JPanel();
//    JPanel a1	 = new JPanel();
//    JPanel a1	 = new JPanel();
//    JPanel a1	 = new JPanel();
//    JPanel a1	 = new JPanel();
    
	public static TreeNode createTree() 
	{
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("Hilfe");
		
		DefaultMutableTreeNode table  		 = new DefaultMutableTreeNode("Tabelle");
		DefaultMutableTreeNode task   		 = new DefaultMutableTreeNode("Aufgabe");
		DefaultMutableTreeNode export_data 	 = new DefaultMutableTreeNode("Export");
		DefaultMutableTreeNode import_data 	 = new DefaultMutableTreeNode("Import");
		DefaultMutableTreeNode konfiguration = new DefaultMutableTreeNode("Konfiguration");
		
		DefaultMutableTreeNode task1   = new DefaultMutableTreeNode("1");
		DefaultMutableTreeNode task2   = new DefaultMutableTreeNode("2");
		DefaultMutableTreeNode task3   = new DefaultMutableTreeNode("3");
		DefaultMutableTreeNode task4   = new DefaultMutableTreeNode("4");
		DefaultMutableTreeNode task5   = new DefaultMutableTreeNode("5");
		DefaultMutableTreeNode task6   = new DefaultMutableTreeNode("6");
		DefaultMutableTreeNode task7   = new DefaultMutableTreeNode("7");
		DefaultMutableTreeNode task8   = new DefaultMutableTreeNode("8");
		DefaultMutableTreeNode task9   = new DefaultMutableTreeNode("9");
		DefaultMutableTreeNode task10  = new DefaultMutableTreeNode("10");
		DefaultMutableTreeNode task11  = new DefaultMutableTreeNode("11");
		DefaultMutableTreeNode import_data1 = new DefaultMutableTreeNode("Area-Datenbank (WinPE)");
		DefaultMutableTreeNode import_data2 = new DefaultMutableTreeNode("PLZ-Übersicht");
		DefaultMutableTreeNode import_data3 = new DefaultMutableTreeNode("Kreisfreie Städte destatis");
		DefaultMutableTreeNode import_data4 = new DefaultMutableTreeNode("Gemeindeanzahl destatis");
		DefaultMutableTreeNode import_data5 = new DefaultMutableTreeNode("Verkehrszellen Berlin");
		DefaultMutableTreeNode import_data6 = new DefaultMutableTreeNode("Area-Datenbank (ohne Berlin)");
		DefaultMutableTreeNode import_data7 = new DefaultMutableTreeNode("PLZ-Gemeindenr. Verzeichnis");
		DefaultMutableTreeNode import_data8 = new DefaultMutableTreeNode("Area-Datenbank (log-Datei)");
		
		task.add(task1);
		task.add(task2);
		task.add(task3);
		task.add(task4);
		task.add(task5);
		task.add(task6);
		task.add(task7);
		task.add(task8);
		task.add(task9);
		task.add(task10);
		task.add(task11);
		import_data.add(import_data1);
		import_data.add(import_data2);
		import_data.add(import_data3);
		import_data.add(import_data4);
		import_data.add(import_data5);
		import_data.add(import_data6);
		import_data.add(import_data7);
		import_data.add(import_data8);
		
		//Aufgabe
		root.add(task);
		//Export
		root.add(export_data);
		//Import
		root.add(import_data);
		//Konfiguration
		root.add(konfiguration);
		//Tabelle
		root.add(table);
		return root;
	}

	public static void main(String[] args) 
	{
		final JPanel pa = new JPanel();
		a1.setBackground(Color.black);
		TreeNode root = createTree();
		final JTree tree = new JTree(root);
		JLabel g = new JLabel("<html><font color = #003399>Hallo Welt</font></html>");
        a1.add(g);
        tree.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                final TreePath path = tree.getPathForLocation(e.getX(), e.getY());
                if (path != null) {
                    final TreeNode node = (TreeNode) path.getLastPathComponent();
				      String a = path.getLastPathComponent().toString();
				      if ("Export".equals(a)==true){ System.out.println("richtig");                   
				      	if (node.isLeaf()) { pa.add(a1);} }
				      if ("Konfiguration".equals(a)==true){ System.out.println("richtig");                  
				      	if (node.isLeaf()) { Konfigurationen b = new Konfigurationen(); b.konfigurationen(); } }
				      if ("Tabelle".equals(a)==true){ System.out.println("richtig");                   
				      	if (node.isLeaf()) { Tabelle b = new Tabelle(); b.tabelle(); } }
				      if ("10".equals(a)==true){ System.out.println("richtig");                   
				      	if (node.isLeaf()) { Aufgabe10 b = new Aufgabe10(); b.aufgabe10(); } }
                }
            }
        });
		tree.getSelectionModel().addTreeSelectionListener( 
				  new TreeSelectionListener() 
				  { 
					public void valueChanged(TreeSelectionEvent e) {
					      TreePath path = e.getNewLeadSelectionPath(); 
					      String a = path.getLastPathComponent().toString();
//					      if ("Export".equals(a)==true){ System.out.println("richtig");}
//					      if ("Konfiguration".equals(a)==true){ System.out.println("richtig"); }		
//					      if ("Tabelle".equals(a)==true){System.out.println("richtig");}
					      if ("1".equals(a)==true) {System.out.println("richtig");}
					      if ("2".equals(a)==true) {System.out.println("richtig");}
					      if ("3".equals(a)==true) {System.out.println("richtig");}
					      if ("4".equals(a)==true) {System.out.println("richtig");}
					      if ("5".equals(a)==true) {System.out.println("richtig");}
					      if ("6".equals(a)==true) {System.out.println("richtig");}
					      if ("7".equals(a)==true) {System.out.println("richtig");}
					      if ("8".equals(a)==true) {System.out.println("richtig");}
					      if ("9".equals(a)==true) {System.out.println("richtig");}
//					      if ("10".equals(a)==true) {System.out.println("richtig");}
					      if ("11".equals(a)==true) {System.out.println("richtig");}
					      if ("Area-Datenbank (WinPE)".equals(a)==true) {System.out.println("richtig");}
					      if ("PLZ-Übersicht".equals(a)==true) {System.out.println("richtig");}
					      if ("Kreisfreie Städte destatis".equals(a)==true) {System.out.println("richtig");}
					      if ("Gemeindeanzahl destatis".equals(a)==true) {System.out.println("richtig");}
					      if ("Verkehrszellen Berlin".equals(a)==true) {System.out.println("richtig");}
					      if ("Area-Datenbank (ohne Berlin)".equals(a)==true) {System.out.println("richtig");}
					      if ("PLZ-Gemeindenr. Verzeichnis".equals(a)==true) {System.out.println("richtig");}
					      if ("Area-Datenbank (log-Datei)".equals(a)==true) {System.out.println("richtig");}

					}
				  } 
				);

		JPanel panel = new JPanel();
		JPanel p = new JPanel();
		JFrame frame = new JFrame("JTree - Demo");
		JLabel l 	 = new JLabel("<html><font color = #003399><font size = 5>Postleitzahlen</font></B><br>Hilfe- und Anleitung<br></font></html>");
		JLabel label = new JLabel();
	    final Icon smallIcon = new ImageIcon( JMenu.class.getResource("/images/SafirLogo.png") );
		JScrollPane sp = new JScrollPane(tree);
//		sp.setSize(100, 800);
		p.setBackground(Color.white);
		panel.setBackground(Color.white);
		pa.setBackground(Color.white);
		
	    label.setIcon(smallIcon);

		p.add(l, BorderLayout.WEST);
		p.add(label, BorderLayout.EAST);
	
		panel.add(sp);
		JTextArea a = new JTextArea();
		a.setVisible(true);
//		a.setSize(300, 300);
		pa.add(a);

		frame.add(p, BorderLayout.NORTH);
		frame.add(panel, BorderLayout.WEST);
		frame.add(pa, BorderLayout.CENTER);
//		frame.add(a1, BorderLayout.EAST);
	
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setSize(700, 550);
		frame.setLocationRelativeTo( null );
		frame.setVisible(true);
	}
}

Mein Problem, er zeigt mir das Panel a1 nur dann an wenn ich auf den Rand klick. So als ob ich die Größe ändern mag. Ausserdem ändert er die Größe des Treebereiches auch dann nur wenn ich auf den Rand klicke... Ich versteh das nicht wieso das so ist und wie ich es hinbekomme, dass er es alles gleich aktualisiert und ich dem Panel "panel" wo der "tree" drauf ist größer bekomme, so das er von anfang an die einheitliche Größe zB 150,300 hat oder so... mit panel.setSize(150,300) klappt es leider nicht...

kann mir jemand weiter helfen?
 
Zuletzt bearbeitet:
Hallo,

mal so als kleiner Tipp, man sollte Variablen, wie du die JPanels nicht als static deklarieren. Sowas macht man nur, wenn man auf diese zugreifen möchte, wenn man keine Instanz der Klasse hat.

Du solltest alles was du in der main-Methode hast, in eine Methode packen und diese dann im Konstruktor aufrufen oder alles direkt im Konstruktor aufrufen. Dann brauchst du auch die Variablen nicht static zu deklarieren.
So brauchst du in der main-Methode nur noch
Code:
public static void main(String[] args){
   new Hilfe();
}
aufzurufen.

Zu deinem Problem mit dem JPanel, welches nicht angezeigt wird. Du fügst es hinzu wärend das Fenster angezeigt wird. Da musst du dann validate() auf dem Panel aufrufen, dem du das andere Panel hinzufügst. Das ist in deinem Fall pa.
Code:
pa.validate();

Zum Baum.
Der ändert seine Größe ständig, weil du die Scrollpane, in der der Baum liegt, einem Panel hinzugefügt hast, welches das FlowLayout hat. Sobald eine Komponente ein Layout hat, übernimmt das Layout die Anordnung und die Größe der Kindelemente. Beim FlowLayout wird der Komponente auch nur soviel Platz gegeben wie sie braucht. Das heißt, wenn sie mehr Platz braucht, bekommt sie den und wenn sie weniger braucht, wird ihr wieder Platz weggenommen.
Wenn die Größe konstant bleiben soll, kannst du das Layout auf null setzen. Dann funktioniert auch setSize. Das Problem dann ist aber, dass der Baum immer die gleiche Größe hat, auch wenn das Fenster größer gezogen wird.
Deshalb würde ich dir empfehlen, dass du dem Panel auch das BorderLayout zuordnest und dann das Panel BorderLayout.Center platzierst. So wird der ScrollPane das ganze Panel zugeordnet. Dadurch vergrößert sich der Baum nicht ständig, außer wenn du das Fenster größer ziehst. Teste es einfach mal.

Dann würde ich dir mal vorschlagen, dass du dir nochmal die GUI-Programmierung anschaust, bevor du dich an ein größeres Projekt machst.
http://www.galileocomputing.de/open...15_001.htm#mj2e891cdc51578f8f083b119b543f13ac


MFG

Sascha
 
Danke für die Antwort....
Ich denke damit kann ich schon viel Anfangen....



Das mit dem staitic weiß ich auch und ich werde sie nachher noch aufrufen, momentan bin ich noch am Aufbau und habe sie nur deklariert. Trotzdem thanks.

Die andere Sache was die main angeht, ja da hast du recht, im Moment ist auch noch alles dadrin, doch dies war auch nicht das richtige Programm, ich war einfach in dem Test Programm zu faul dass in eine Methode zu schreiben... In dem richtigen Programm wo alles drin ist steht es in einer Methode...

Was gdas Größere Projekt angeht wird Momentan von mir abgeschlossen und keine Angst, da ist auch alles Programmtechnik iO soweit es mein Chef und ich es beurteilen können. Danke für den Link "Java ist auch eine Insel" Das Buch habe ich auch da und nutze es auch... und den Link auch ;)



Danke nochmal :)
Ich hoffe das es nun klappt wie ich es will :p:p
Bei weiteren Fragen werde ich mich melde :)
 
Zurück