TableLayout: JComboBox zerstört alles...

Maikata

Mitglied
Ich bin am verzweifeln.
Ich benutze TableLayout als LayoutManager und versuche damit eine einfahce GUI zu bauen.

Ich hab zwei Spalten, in beiden werden JPanels angezegit. In dem JPanel der rechten Spalte befinden sich wiederum weitere JPanel.

So alles läuft gut soweit. Doch jetzt kommts... Wenn ich eine JComboBox erstelle, wirklich nur erstelle, ohne sie überhaupt dem panel hinzuzufügen verschwindet mein gesamter rechter JPanel......


Ich versteh das eifnach net, ich hock schon seit ner Stunde dran. Hab vorher schon mit TableLayout gearbeitet und schon erfolgreich JComboBoxen hinzugefügt..... Warum geht denn das jetzt nicht?? ???:L

Hier mal der Code von dem rechten JPanel:

Java:
public class Controls extends JPanel {
	
	private double [][] layoutSize= {
			{ 10, TableLayout.FILL, 10},
			{ 10, TableLayout.PREFERRED, 10, TableLayout.FILL, 10}
	};

//////////////////// WENN ICH DAS HIER AUSKOMMENTIERE VERSCHWINDET DIESES GESAMTE JPANEL ////
//	private JComboBox c = new JComboBox();

	
	public Controls() {
		setBackground(Color.WHITE);
		setBorder(BorderFactory.createLineBorder(Color.BLACK));
		setPreferredSize(new Dimension(250, 0));
		setLayout(new TableLayout(layoutSize));
		addMovementControl();
	}
	
	private void addMovementControl() {
		double [][] size = {
				{ 10, TableLayout.MINIMUM, 10, TableLayout.FILL, 10, TableLayout.MINIMUM, 10},
				{ 10, TableLayout.FILL, 10, TableLayout.FILL, 10}};
		
		JPanel movementControl= new JPanel();
		movementControl.setLayout(new TableLayout(size));
		movementControl.setBackground(Color.WHITE);
		movementControl.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		JButton left = new JButton("<");
		JButton right = new JButton(">");
		JButton move = new JButton("Move");
		
		movementControl.add(left, "1, 3");
		movementControl.add(move, "3, 3");
		movementControl.add(right, "5, 3");
		add(movementControl, "1, 1");	
		
		
		
	}
}


Ok und hier noch der Code von dem ganzen fenster in dem das rechte JPanel (Controls) erstellt wird...

Java:
public class Shell extends JFrame {
	
	private double [][] size = {
			{ 10, TableLayout.FILL, 10, TableLayout.PREFERRED, 10 },
			{ 10, TableLayout.FILL, 10 }};
	private TableLayout layout = new TableLayout(size);
	
	public Shell() {
		setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
		setExtendedState(JFrame.MAXIMIZED_BOTH);
		setResizable(false);
		setUndecorated(true);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(layout);
		setTitle("Multi-Agent-System Simulation");	
		setFocusable(true);

		
		// das ist ein JPanel (linkes jpanel)
		MultiAgentSystem systemPanel=  new MultiAgentSystem((int) (getWidth() * 0.8));
		systemPanel.newRobot("test", Color.CYAN);
		systemPanel.setPosition("test", 10, 10);
		add(systemPanel, "1, 1");
		

// Das hier ist das rechte Panel dass verschwindet wenn ich eine JCombobox erstelle.....
		Controls controlPanel = new Controls();
		add(controlPanel, "3, 1");
		
		
	}


Hoffe ihr könnt mir helfen, ich bin am verzweifeln 🙁
 
Zuletzt bearbeitet:
Ich hab noch kurz zwei Screenshots gemacht, damit ihr euch das besser vorstellen könnt.

Also das erste ist so wie es aussehen soll. Das zweite passiert wenn ich wie gesagt einfach eine ComboBox erstelle...... Das rechte Panel verschwindet komplett.
 
ok danke für den Hinweis. Ich werds mir nochmal anschaun.
Was ich noch gemerkt hab: Es liegt nicht an JComboBox. Es geht mit JList und JTextArea z.B. auch nicht. Wenn ich aber ein JLabel oder JButton erstelle ist es kein Problem....
 
Bist du dir sicher, dass du mit deinen kryptisch abgekürzten Variablennamen nicht die Membervariable-ComboBox namens "c" nicht lokal mit einer Variable verwechselst die du auch "c" genannt hast?
 
ne, das was ihr in der Klasse Controls seht, ist wirklich die ganze Klasse. Und die Klasse Shell ist auch genau so wie ich sie hier gepostet hab. Nur die MultiAgentSystem hab ich net gepostet. Aber wenn ich das komplett auskommentiere funktioniert es auch nicht...




EDIT: Ok wenn ich pack(); auf dem JFrame aufrufe, dann wirds angezeigt.... ohne pack(); allerdings nicht. Woran kann denn das jetzt liegen?

EDIT2: Wenn ich das JFRame resize dann wird es plötzlich angezeigt... Wie könnt ich das jetzt hinkriegen dass es auch schon im vollbild modus angezeigt wird? Das ist echt komisch...
 
Zuletzt bearbeitet:
ok ich habs jetzt mal mit automatischem resize gemacht, jetzt klappts auch. Aber ich frag mich warum ich das machen muss.....

setSize(1, 1);
setExtendedState(JFrame.MAXIMIZED_BOTH);
 

Zurück
Oben