BoxLayout-nicht teilbar

KingOfExceptions

Bekanntes Mitglied
Java:
				JPanel panel1=new JPanel();
				panel1.setLayout(new FlowLayout());
				JPanel panel2=new JPanel();
				panel2.setLayout(new FlowLayout());
				
				dhaupthaus=new JDialog();
				dhaupthaus.setLayout(new BoxLayout(dhaupthaus,BoxLayout.Y_AXIS));
				
				
				
				dhaupthaus.add(panel1);
				dhaupthaus.add(panel2);
				
				panel1.add(aktuellerAusbau);
				panel2.add(eisenmine);
				panel2.add(lehmgrube);lehmgrube.addActionListener(new GebäudeListener());
				panel2.add(holzfäller);holzfäller.addActionListener(new GebäudeListener());
				
				dhaupthaus.pack();
				dhaupthaus.setVisible(true);

was ist hier falsch? irgendwas stimmt anscheinend nicht mit dem Layout ?!
 
Java:
				JPanel panel1=new JPanel();
				panel1.setLayout(new FlowLayout());
				JPanel panel2=new JPanel();
				panel2.setLayout(new FlowLayout());
JPanel besitzt bereits standardmäßig ein FlowLayout.
was ist hier falsch? irgendwas stimmt anscheinend nicht mit dem Layout ?!
Die Frage müsstest Du wohl eher uns beantworten: Was stimmt mit dem Layout nicht?
An dem Code kann man nicht viel erkennen.
 
ok hab das flowlayout raus genommen..... geht trotzdem nicht...

ich möchte zwei panels die untereinander sind und dass in diesen panels die sachen nebeneinander sind....

die fehlermeldung:

Code:
Exception in thread "AWT-EventQueue-0" java.awt.AWTError: BoxLayout can't be shared
	at javax.swing.BoxLayout.checkContainer(Unknown Source)
	at javax.swing.BoxLayout.invalidateLayout(Unknown Source)
	at javax.swing.BoxLayout.addLayoutComponent(Unknown Source)
	at java.awt.Container.addImpl(Unknown Source)
	at java.awt.Container.add(Unknown Source)
	at javax.swing.JDialog.addImpl(Unknown Source)
	at java.awt.Container.add(Unknown Source)
	at Dorf$GebäudeListener.actionPerformed(Dorf.java:88)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

BTW linie 88 ist hier
Code:
dhaupthaus.add(panel1);
 
Für Untereinander könntest du ganz normal das BorderLayout nehmen. Und die Panel in North und South hinzufügen. Und für nebeneinander hast du ja bereits das FlowLayout für dich entdeckt.

Den Fehler kannst du ja wohl selbst Googlen, bist ja nicht der erste mit dem Fehler 🙂
 
Java:
dhaupthaus=new JDialog();
                dhaupthaus.setLayout(new BoxLayout(dhaupthaus,BoxLayout.Y_AXIS));
Das Problem ist, dass setLayout von JFrame und JDialog an deren ContentPane weitergeleitet wird. D.h. das Layout wird auf die ContentPane gesetzt (wo es auch hingehört) im Konstruktur übergibst Du aber die Referenz auf den Dialog => can't be shared
Lösung:
Java:
dhaupthaus.setLayout(new BoxLayout(dhaupthaus.getContentPane(), ...
[EDIT]Vielleicht noch eine Anmerkung: Da der Code von einem Listener aufgerufen wird und daher vermutlich öfter durchlaufen wird, sollte man den Dialog und das drumherum nicht jedesmal neu aufbauen. Besser einmalig ausserhalb des Listeners aufbauen und beim Auslösen des Events einfach nur noch anzeigen.[/EDIT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben