Layout - Components richtig setzen

kloakenratte

Grünschnabel
Hallo!

Also, hab einen JFrame, in dem ich mehrere Panels hab, zb. SearchPanel und die will ich eben über das Menü entweder visible setzen oder invisible, je nachdem welcher ausgewählt wird zb. bei Suchen wird SearchPanel visible gesetzt und das EditPanel und DeletePanel auf invisible. Je nachdem wird auch mit this.setContentPane(..) gewechselt.
Das klappt ja auch ganz gut.
Auf den Panels befinden sich jeweils Components (Combobox, Textfield, Label, etc.) und die setze ich an die richtige Position bzw. weise die Größe bei der Fkt. paintComonents(). Wird die Größe des JFrame verändert, werden im Eventhandler componentResized(..) die Components neu gesetzt. Mein Problem ist jetzt, dass die Panels zu der zeit immer die falsche Größe haben und deshalb die Components falsch gesetzt sind. Ich geh doch richtig in der Annahme, dass die Panels, wenn sie als ContentPane gesetzt sind, die neue Größe des JFrames mitbekommen sollten. Vor allem das JScrollPane auf dem SearchPanel macht mir Schwierigkeiten, wenn ich die Größe ändere bzw. ändern will.
Wär für jegliche Anregungen dankbar!


Code:
imports ...

public class SearchPanel extends JPanel
{
	private JPanel pnl_search = null;
	private JComboBox cbx_search = null;
	...
	
	public SearchProduct(ActionListener listener, Color bckgColor)
	{
		this.setBackground(bckgColor);
		this.setLayout(null);
		this.setName("SearchPanel");
		
		this.pnl_search = new JPanel();
		this.pnl_search.setBackground(new Color(70,130,180));
		this.pnl_search.setBorder(BorderFactory.createEtchedBorder());
		
		this.cbx_search = new JComboBox(ComboBoxItems.getCBItems()); // Vector mit Items
		this.cbx_search.setEditable(false);
		this.pnl_search.add(this.cbx_search);

		...
	}
	
	public void paintComponents()
	{
		try
		{			
			this.pnl_search.setLocation(20, 20);
			this.pnl_search.setSize(this.getWidth() - 40, 61);

			
			this.cbx_search.setLocation(20, 21);
			this.cbx_search.setSize(200,19);
			this.cbx_search.setMinimumSize(new Dimension(200,19));
			this.cbx_search.setMaximumSize(new Dimension(200,19));

			...
			
		}
		catch(Exception ex)
		{
			ErrorLogging.GenerateErrorLog(ex);
		}
	}
}


public class Pgm extends JFrame implements ComponentListener
{
	private SearchPanel search = null;

	public Pgm()
	{
		...
		search = new SearchPanel(...);

		this.search.paintComponents();
		this.search.setVisible(true);		
		
		this.setContentPane(search);
	}

	public static void main(String[] args) 
	{
		// TODO Automatisch erstellter Methoden-Stub
		Pgm  progi = new Pgm();
		progi.setVisible(true);	
	}

	public void componentResized(java.awt.event.ComponentEvent e) 
	{
		this.search.paintComponents();
                        ....
	}
}
 
Erstmal: Klick mal bitte unten auf "Frage offen" denn deine Frag scheint ja noch nicht beantwortet zu sein.

Zu deiner Frage: Normalerweise kümmert man sich nicht selber ums Layout, sondern lässt dies von einem LayoutManager für einen machen. Du benutzt momentan gar kein Layout sonder setzt die Komponente per setLocation ja selber.

Schau dir mal die Kapitel über LayoutManager z.B. in Java ist auch eine Insel an.
 
Zurück