Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Java GUI LayoutManager

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich bin gerade dabei mich in java einzuarbeiten und versuche eine GUI zu erstellen.

ich nutze das borderlayout. jetzt möchte ich innerhalb des centers zwei checkboxen ertellen.

ist das möglich, oder kann ich immer nur eine komponente pro richtung einfügen?

Womöglich müsste ich das borderlayout.center mit einem flowlayout verschachteln, allerdings verstehe ich nicht wie das funktioniert.

Weiterhin stellt sich mir die Frage, ob es möglich ist, die Größe der verschiedenen Bereiche des borderlayouts zu verändern?

Bitte um Hilfe.

Danke.

jedes Panel hat genau einen LayoutManager, der bestimmt, wie die Komponenten anzuordnen sind (das Fenster beinhaltet selbst ein Panel, welches in deinem Fall das BorderLayout besitzt)

wenn du in der Mitte mehr als eine Komponente haben möchtest, die nicht den gesamten Inhalt füllt, dann willst du eigentlich, dass ein Container (JPanel) dort die weiteren Elemente aufnimmt und anders anordnet (du solltest dir diesbezüglich, sofern noch nicht geschehen, die anderen LayoutManager anschauen)

diesem kannst du dann das FlowLayout zuweisen

bei einem Borderlayout kann man die Größe der Elemente kaum beeinflussen

das mittlere Element nimmt immer den restlichen zur Verfügung stehenden Platz, abzüglich der festlegbaren Abstände

das obere und untere Element verwendet immer die gesamte Breite und das rechte und linke Element verwendet immer die (abzüglich der Höhe des oberen und unteren Elements) restliche Höhe, abzüglich der Abstände

ansonsten sind die Elemente am Rand frei in iherer Höhe bzw. Breite

Ist es dann nicht sinnvoller, wenn ich ohne LayoutManager arbeite?

Immerhin muss ich die verschiedenen Komponenten unterschiedlichen groß gestalten und im BorderLayout werden die Komponenten ja immer so angelegt, dass sie exakt so groß sind wie die "Himmelsrichtung".

Nein! Wenn du ein Null-Layout verwendest, musst du dich selber um das Positionieren und Skalieren deiner Komponenten kümmern. Die API bietet auch Methoden zum setzen von minimalen und maximalen Höhen und Breiten an!

theoretischerweise ist es möglich, sich seinen eigenen LayoutManager zu schreiben, allerdings dürfte dies ausreichend schwierig sein, sodass in fast jedem Fall das geschickte Kombinieren der vorhandenen LayoutManager ausreicht

du solltest dir auch mal GUI-Builder ansehen

in NetBeans ist ein meines Erachtens nach gut zu verwendender integriert, in neueren Eclipse-Versionen kann man diesen über ein Plugin nachinstallieren (in älteren war dieser ebenfalls integriert)


	public JPanel buildOptionPanel()

	{

		JPanel OptionPanel = new JPanel (new GridLayout(20,1));

	//	OptionPanel.setLayout(new GridLayout());

		OptionPanel.add(checkBox1);

		OptionPanel.add(checkBox2);

		OptionPanel.setBorder(BorderFactory.createTitledBorder("Transaction"));

		JPanel OptionPanel2 = new JPanel (new FlowLayout());

	//	OptionPanel.setLayout(new GridLayout());

		OptionPanel2.add(checkBox1);

		OptionPanel2.add(checkBox2);

		OptionPanel2.setBorder(BorderFactory.createTitledBorder("Accounts"));

		OptionPanel.add(OptionPanel2);

		//OptionPanel.setBorder(BorderFactory.createTitledBorder("Transaction"));



		return OptionPanel;


	}

	public JFrame createFrame()

	{

frame.add(buildOptionPanel(),BorderLayout.CENTER );

}

Warum liegen die beiden Panel (Transaction und Accounts) übereinander? Ich würde diese gern nebeneinander anordnen!

Bitte um Hilfe.

DANKE.

du fügst dem OptionPanel ("Transaction") das OptionPanel2 ("Accounts") hinzu

dadurch wird das OptionPanel2 in dem OptionPanel dargestellt

willst du sie nebeneinander haben, dann benötigst du ein JPanel, welches diese beiden aufnimmt (dem du also die beiden Komponenten zuweist)

Okay.

Inwieweit müsste ich meinen Code dann anpassen?

Habe schon x-Versuche ausprobiert aber irgendwie funktioniert die Anordnung nebeneinander nicht. Wenn ich nur ein Panel nutze, besitzt dieser auch nur einen Title. Ich benötige einen Panel mit einer Unterteilung in Account und Transaction, die wiederum eine Auflistung von CheckBoxen besitzen.

probier folgendes:

lege ein JPanel mit dem Namen containerPanel an

weise dem containerPanel einen FlowLayout-LayoutManager zu

lege ein JPanel mit dem Namen transactionPanel an

gibt dem transactionPanel seinen Rahmen

gib dem transactionPanel seinen LayoutManager

gib dem transactionPanel seine untergeordneten Komponenten (die Checkboxen)

füge dem containerPanel das transactionPanel hinzu

lege ein JPanel mit dem Namen accountPanel an

gibt dem accountPanel seinen Rahmen

gib dem accountPanel seinen LayoutManager

gib dem accountPanel seine untergeordneten Komponenten (die Checkboxen)

füge dem containerPanel das accountPanel hinzu

so dürfte das dann funlktionieren

Super, danke.

Ich möchte nun aber die Panel unterschiedlichen groß gestalten (also die Border von Account und Transaction sollen unterschiedlich groß sein), da ich nur 3 Accounts habe und dagegen mehr als 20 Transactions.

Über setSize funktioniert die Veränderung der Panels nicht wirklich?!

Tip oder andere Möglichkeiten?

Hat niemand eine Idee wie ich im Center zwei unterschiedliche große Panels einrichte bzw. generell Panelgröße im Centerbereich anpasse?

du solltest dich mit den verschiedenen LayoutManagern, die von Hause aus mitgebracht werden, auseinander setzen

so dürftest du dir dann deine Fragen selbst beantworten können und musst nicht für jede mögliche Situation erneut nachfragen, wie man dies denn umsetzen könnte

Ja ich vermute das ich dies mit dem GridBagLayout machen muss, allerdings erscheint mir dies als ziemlich kompliziert. Andere Möglichkeiten gibt es nicht?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.