LayoutManager Componenten über verfügbaren Platz strecken

Loep

Aktives Mitglied
Ich will im Header eines Programms drei Textzeilen anzeigen, die sich über die gesamte verfügbare Fläche ausbreiten. Rechts daneben soll ein Logo platziert werden, dass auch erstmal so groß werden kann wie es will (das Bild ansich wird klein sein).

Probleme bei meinem bishrigen Code:
- die Zeilen breiten sich nicht aus: wie bringe ich sie dazu?
(- das Image ist nicht ganz recht, wobei ich da noch nicht sicher bin, ob mir die jetzte Lösung nicht doch zusagt)

Java:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class LayoutDemo {

	public static void main(String[] args) {
		JFrame demo = new JFrame();
		demo.setLayout(new BorderLayout());
		demo.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		JPanel frame = new JPanel(new FlowLayout());
		frame.setBorder(BorderFactory.createEtchedBorder());
		JPanel maincontent = new JPanel(new GridLayout(0, 1));
		maincontent.setBorder(BorderFactory.createEtchedBorder());
		JLabel row1 = new JLabel("Row 1");
		row1.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row1);
		JLabel row2 = new JLabel("Row 2");
		row2.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row2);
		JLabel row3 = new JLabel("Row 3");
		row3.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row3);
		frame.add(maincontent);
		JLabel image = new JLabel("Logo");
		image.setBorder(BorderFactory.createEtchedBorder());
		frame.add(image);
		demo.add(frame, BorderLayout.NORTH);
		demo.setSize(1024, 768);
		demo.setVisible(true);
	}

}
 

Michael...

Top Contributor
Ein JPanel frame zu nennen fördert nicht gerade das Verständnis.
Nimm ein JPanel titlePanel mit BorderLayout. In dessen CENTER Bereich das JPanel mit GridLayout und den drei Labels. In den EAST Bereich das Logo Label.
Das titlePanel dann in den NORTH des JFrames.
 

Loep

Aktives Mitglied
Ja, auf die Namensgebung hätte ich mehr achten können.
Aber dein Vorschlag sieht in meiner Demo schonmal nach dem gewünschten Ergebnis aus... dann soll das in der richtigen Anwendung wohl auch so werden ;) Danke!

Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class LayoutDemo {

	public static void main(String[] args) {
		JFrame demoApp = new JFrame();
		demoApp.setLayout(new BorderLayout());
		demoApp.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		JPanel header = new JPanel(new BorderLayout());
		header.setBorder(BorderFactory.createEtchedBorder());
		JPanel maincontent = new JPanel(new GridLayout(0, 1));
		maincontent.setBorder(BorderFactory.createEtchedBorder());
		JLabel row1 = new JLabel("Row 1");
		row1.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row1);
		JLabel row2 = new JLabel("Row 2");
		row2.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row2);
		JLabel row3 = new JLabel("Row 3");
		row3.setBorder(BorderFactory.createEtchedBorder());
		maincontent.add(row3);
		header.add(maincontent, BorderLayout.CENTER);
		JLabel image = new JLabel("Logo");
		image.setBorder(BorderFactory.createEtchedBorder());
		header.add(image, BorderLayout.EAST);
		demoApp.add(header, BorderLayout.NORTH);
		demoApp.setSize(1024, 768);
		demoApp.setVisible(true);
	}

}
 

GUI-Programmer

Top Contributor
Hab da mal schnell was zusammengestellt (Mit Eclipse und den WindowBuilder):
Java:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.BorderLayout;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.factories.FormFactory;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.SwingConstants;
import java.awt.Font;


public class Test3 extends JPanel {
	protected JPanel pnl;
	protected JLabel lblRow;
	protected JLabel lblIcon;
	protected JLabel lblRow_1;
	protected JLabel lblRow_2;

	public Test3(JFrame f) {
		setPreferredSize(new Dimension(1000, 750));
		setLayout(new BorderLayout(0, 0));
		
		pnl = new JPanel();
		pnl.setPreferredSize(new Dimension(1000, 100));
		add(pnl, BorderLayout.NORTH);
		pnl.setLayout(new FormLayout(new ColumnSpec[] {
				ColumnSpec.decode("default:grow"),
				FormFactory.RELATED_GAP_COLSPEC,
				ColumnSpec.decode("default:grow"),},
			new RowSpec[] {
				FormFactory.UNRELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,
				FormFactory.RELATED_GAP_ROWSPEC,
				FormFactory.DEFAULT_ROWSPEC,}));
		
		lblRow = new JLabel("Row 1");
		lblRow.setOpaque(true);
		lblRow.setBackground(Color.RED);
		pnl.add(lblRow, "1, 2, fill, default");
		
		lblRow_1 = new JLabel("Row 2");
		lblRow_1.setBackground(Color.YELLOW);
		lblRow_1.setOpaque(true);
		pnl.add(lblRow_1, "1, 4, fill, default");
		
		lblIcon = new JLabel("Icon");
		lblIcon.setFont(new Font("Tahoma", Font.PLAIN, 41));
		lblIcon.setForeground(Color.WHITE);
		lblIcon.setHorizontalAlignment(SwingConstants.CENTER);
		lblIcon.setOpaque(true);
		lblIcon.setBackground(Color.BLUE);
		pnl.add(lblIcon, "3, 2, 1, 5, fill, default");
		
		lblRow_2 = new JLabel("Row 3");
		lblRow_2.setBackground(Color.GREEN);
		lblRow_2.setOpaque(true);
		pnl.add(lblRow_2, "1, 6, fill, default");
		
	}
	
	private static void createFrame() {
		JFrame f = new JFrame("Layout Test");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setContentPane(new Test3(f));
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				createFrame();
			}
		});
	}
}

Wolltest du, dass dein Frame (unabhängig vom Code her, würde mit anderen Layout wahrscheinlich auch gehen) in etwa so aussieht, also die Vergrößerung deiner Titelleisten und deines Icon so ist?
 

Loep

Aktives Mitglied
Danke. Ich wollte mir immer nochmal einen WindowBuilder angucken, aber bei dem Code weiß ich warum ich mir doch immer wieder (auch wenn ich es selten machen muss) den Aufwand mache den Code der GUI selber zu implementieren: wartbar ist was anderes :O

Copy&Paste bekomme ich in Eclipse 17 Errors... offenbar fehlt mir ne jgoodies Bibliothek.
 

GUI-Programmer

Top Contributor
OK, dann hier mal das Ergebnis in Bildern:

P.S. Erstellt hab ich das, dank WindowBuilder in weniger als 10 min! Natürlich sollte man auch Grundlegendes zu den jeweiligen Layout wissen, was man benutzt.
 

GUI-Programmer

Top Contributor
Ich würde mal behaupten, dass ich das ohne WindowBuilder und FormLayout in weniger als zwei Minuten schaffen würden

Wie gesagt: weniger als 10 min. Dass kann auch heißen das es weniger als 2 min waren, hab halt grad die Zeit ausnahmsweise mal net gestoppt :lol: und bin zudem müde!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
L Componenten im JFrame an genaue stelle verschieben. AWT, Swing, JavaFX & SWT 2
V Swing Componenten Array AWT, Swing, JavaFX & SWT 3
B Swing JMenu zwischen anderen Componenten AWT, Swing, JavaFX & SWT 4
J Swing Componenten übereinander platzieren. AWT, Swing, JavaFX & SWT 17
M SWT SWT Componenten auf GLCanvas zeichnen AWT, Swing, JavaFX & SWT 3
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
L Swing Serverbrowser, aber welche componenten? AWT, Swing, JavaFX & SWT 2
H Mit for-schleife die Componenten eines Frames verändern AWT, Swing, JavaFX & SWT 5
H SWT Breite von componenten zu bestimmen AWT, Swing, JavaFX & SWT 2
T JFrame Componenten Problem AWT, Swing, JavaFX & SWT 17
T Swing JSplitPane Componenten ausrichten AWT, Swing, JavaFX & SWT 4
lumo Swing Componenten ersetzen AWT, Swing, JavaFX & SWT 2
L Swing Kommunikation zwischen JMenuBar und anderen Componenten AWT, Swing, JavaFX & SWT 2
E Im Frame alle Componenten abrufen AWT, Swing, JavaFX & SWT 2
R Wie kann ich programmatisch Clicks auf Componenten ausfuehren? AWT, Swing, JavaFX & SWT 26
S Standpunkt von Componenten frei bestimmen AWT, Swing, JavaFX & SWT 10
R Thumbpanel bzw. Layout das Componenten in einem Grid anordnet ..? AWT, Swing, JavaFX & SWT 13
D verschieden große Componenten in einem JPanel? AWT, Swing, JavaFX & SWT 2
A Swing: Componenten in einem deaktivierten JPanel AWT, Swing, JavaFX & SWT 2
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
G SystemTray BubbleInfo an anderen Componenten anzeigen AWT, Swing, JavaFX & SWT 6
J durchsichtige componenten AWT, Swing, JavaFX & SWT 3
S Componenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
R Componenten eines JFrames updaten AWT, Swing, JavaFX & SWT 11
thE_29 TableRenderer und JPanel => Abfrage auf Componenten Posit AWT, Swing, JavaFX & SWT 2
S Mehere Componenten setEnabled(false) in JToolBar AWT, Swing, JavaFX & SWT 4
M componenten im jframe erst nach fensterveränderung sichtbar AWT, Swing, JavaFX & SWT 2
S verhindern von drag-n-drop von swing componenten AWT, Swing, JavaFX & SWT 2
T Objektorientierung bei Componenten häh? AWT, Swing, JavaFX & SWT 5
D Componenten Problem - aktualisieren nach hinzufügen AWT, Swing, JavaFX & SWT 2
V JTable mit mehreren Componenten in einer Spalte ? AWT, Swing, JavaFX & SWT 6
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
T Scene wechseln über ManuItem AWT, Swing, JavaFX & SWT 7
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
A Layoutwechsel über RadioButtons AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
J Spielfelder auch über die Tastatureingabe (1…9) ansteuern (Tic Tac Toe) AWT, Swing, JavaFX & SWT 2
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
F Verzeichnis über GUI erstellen AWT, Swing, JavaFX & SWT 2
T GUI über Tastatur bedienen AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
L JavaFX TreeView Edit Mode über F2 AWT, Swing, JavaFX & SWT 13
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
C JavaFX GUI - Entscheidung über Framework AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
kaoZ Swing JFrame lässt sich nicht über dispose() abbauen AWT, Swing, JavaFX & SWT 0
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
B Swing Borderlayout East über North AWT, Swing, JavaFX & SWT 5
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
A Swing JTable wird nicht über zurückegebene Referenz geaddet.Wieso nicht? AWT, Swing, JavaFX & SWT 5
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben