LayoutManager Zeilenweise Anordnung von Panels

Bizarrus

Bekanntes Mitglied
Hallöchen.
Bin ein wenig am verzweifeln, da ich diverse JPanels anordnen möchte,...

Ich habe ein JFrame, aufdem ein JScrolledPanel hinzugefügt ist. In diesem ist ein JPanel vorhanden.
In diesem JPanel sollen nun X beliebige JPanels geadded werden, die untereinander angereiht werden. Die Anordnung sollte speziell sein:

Die Panels müssen eine 100-prozente breite haben, egal wie das Fenster nun vergrößert/verkleinert wird. Andersherum aber keine 100-prozente höhe. Habe schon einige LayoutManager ausprobiert, einige ziehen beispielsweise alle Panels auf die ganze Fensterhöhe und passt dementsprechend die Höhen der einzelnen Panels an, dies ist aber nicht gewollt.

Hat jemand vielleicht eine Idee, wie ich des anstelle?

Und so soll dies ausschauen:
 

Anhänge

  • scrollpanelundso85c7b.jpg
    scrollpanelundso85c7b.jpg
    67,3 KB · Aufrufe: 41
Zuletzt bearbeitet von einem Moderator:

Bizarrus

Bekanntes Mitglied
Did'nt work.
Genau das selbe wie sonst.

Die höhe passt sich immer wieder automatisch an (was es nicht soll).
Auch die Seite hatte ich bereits mehrfach auf gehabt ^^

Hier, Sofern das Fenster resized wird, soll sich die Breite zwar anpassen, aber die höhe der einzelnen Panels nicht: ‪screen.avi‬‏ - YouTube

Die Panels habe ich verschiedenfarbig eingefärbt...
 

askk

Mitglied
Schon mal das TableLayout angeschaut?
TableLayout
Damit kannst du deinen Spalten-/Zeilenhöhen einen prozentualen Wert geben, oder, falls es komplett vorgegeben sein soll, auch eine absolute Höhe in Pixeln.
Achja, die Angaben kannst du natürlich auch mischen. Zum Beispiel erste Spalte 100% Breite, erste Zeile 40 Pixel.
 

Bizarrus

Bekanntes Mitglied
In Eclipse gibt es anscheinend kein TableLayout. Zudem verstehe ich leider die Größen-Parameter nicht. Wie ist dies aufgebaut? Auf welche parameter muss ich da achten? Wie kann ich TableLayout in eclipse nutzen?

Oder gibts andere LayoutManager, die einfacher sind?

EDIT:
Gerade gesehen, dass dort eine JAR-File herunter geladen werden kann. Des muss ich wahrscheinlich im Projekt setzen, richtig? Sry, aber externe Jars bzw Libs darf ich/möchte ich leider nicht benutzen.
 

Bizarrus

Bekanntes Mitglied

Bin gerade dabei hiermit herumzuwurschteln, sieht schon für den Anfang nicht schlecht aus.
Nun leider gibt es auch hier ein kleines Problem:
Obwohl ich den "Hauptpanel" eine größe zugewiesen habe, sind die inneren Panels Zentriert und klein (also beispeislweise von der breite niocht ausgefüllt). Das ausrichten auf NORTH bzw NORTHWEST funktioniert auch nicht.

Gibts da noch etwas zu beachten?
 

L-ectron-X

Gesperrter Benutzer
Zuletzt bearbeitet:

Bizarrus

Bekanntes Mitglied

L-ectron-X

Gesperrter Benutzer
Ja,
Code:
gbc.weighty = 1.0;
z.B. Aber nur an der untersten Komponente.
Wenn das dann noch nicht funktioniert, solltest du die Einstellungen von
Code:
gbc.anchor = GridBagConstraints.NORTH;
auch an die anderen Komponenten hängen.
 

Bizarrus

Bekanntes Mitglied
Das setzen von weighty (einmal bei allen Elementen, als auch nur beim aller letzten) bring leider nicht das gewünschte ergebniss. Auch das Setzen auf NORTH leider nicht.
 

Ariol

Top Contributor
Java:
	public static void main(String[] args) {
		final JFrame f = new JFrame();
		f.setPreferredSize(new Dimension(100,100));
		
		JPanel p = new JPanel();
		p.setLayout(new GridBagLayout());
		
		JPanel r = new JPanel();
		r.setBackground(Color.RED);
		r.setPreferredSize(new Dimension(100,100));
		JPanel g = new JPanel();
		g.setBackground(Color.GREEN);
		g.setPreferredSize(new Dimension(100,30));
		JPanel b = new JPanel();
		b.setBackground(Color.BLUE);
		b.setPreferredSize(new Dimension(100,60));
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		gbc.fill=GridBagConstraints.HORIZONTAL;
		gbc.anchor=GridBagConstraints.NORTH;
		
		
		gbc.weightx=1;
		gbc.weighty=0;
		gbc.gridy=0;
		p.add(r,gbc);
	
		gbc.weightx=1;
		gbc.weighty=0;
		gbc.gridy=1;
		p.add(g,gbc);
		
		gbc.weightx=1;
		gbc.weighty=1;
		gbc.gridy=2;
		p.add(b,gbc);
		
		
		JScrollPane jsp = new JScrollPane(p);
		
	
		f.add(jsp);
		f.pack();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		SwingUtilities.invokeLater(new Runnable(){
			@Override
			public void run() {
				f.setVisible(true);				
			}
		});
	}
 

Bizarrus

Bekanntes Mitglied
So wie ich erkennen kann muss es dann wie folgt gesetz werden:

- weightx bleibt bei jedem Element auf 1
- weighty = 1 bekommt nur das letzte Element
- gridy wird für jedes Element hochgezählt (i++)

Oder verstehe ich dies falsch?
Danke für das Beispiel
 

L-ectron-X

Gesperrter Benutzer

Ariol

Top Contributor
Genau so. Wenn du jetzt in einer Reihe mehrere Elemente haben willst musst du das natürlich anpassen:

Java:
	public static void main(String[] args) {
		final JFrame f = new JFrame();
		f.setPreferredSize(new Dimension(100,100));
		
		JPanel p = new JPanel();
		p.setLayout(new GridBagLayout());
		
		JPanel r = new JPanel();
		r.setBackground(Color.RED);
		r.setPreferredSize(new Dimension(100,100));
		JPanel g = new JPanel();
		g.setBackground(Color.GREEN);
		g.setPreferredSize(new Dimension(100,30));
		JPanel b = new JPanel();
		b.setBackground(Color.BLUE);
		b.setPreferredSize(new Dimension(100,60));
		JPanel y = new JPanel();
		y.setBackground(Color.YELLOW);
		y.setPreferredSize(new Dimension(100,60));
		
		GridBagConstraints gbc = new GridBagConstraints();
		
		gbc.fill=GridBagConstraints.HORIZONTAL;
		gbc.anchor=GridBagConstraints.NORTH;
		
		
		gbc.weightx=1;
		gbc.weighty=0;
		gbc.gridwidth=2;
		gbc.gridy=0;
		p.add(r,gbc);
	
		gbc.weightx=1;
		gbc.weighty=0;
		gbc.gridwidth=2;
		gbc.gridy=1;
		p.add(g,gbc);
		
		gbc.weightx=0.5;
		gbc.weighty=1;
		gbc.gridwidth=1;
		gbc.gridy=2;
		p.add(b,gbc);
		
		gbc.weightx=0.5;
		gbc.weighty=1;
		gbc.gridwidth=1;
		gbc.gridy=2;
		p.add(y,gbc);
		
		
		
		JScrollPane jsp = new JScrollPane(p);
		
	
		f.add(jsp);
		f.pack();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		SwingUtilities.invokeLater(new Runnable(){
			@Override
			public void run() {
				f.setVisible(true);				
			}
		});
	}
 

Bizarrus

Bekanntes Mitglied
Okay, dann weiß ich schonmal wie es Theoretisch funktionieren würde. Nun leider gibts da aber anscheinend noch ein kleiner Denkfehler.

Habe des nun in einer for-Schleife gepackt um des zu testen. messages ist eine Vector mit X beliebigen Strings,...

Java:
// Main
		JPanel output = new JPanel();
		output.setLayout(new GridBagLayout());
		
		// Settings
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridheight = GridBagConstraints.RELATIVE;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.weightx = 1.0;
		//constraints.insets = new Insets( 5, 5, 5, 5 );
		 

		constraints.anchor = GridBagConstraints.NORTH;
		

    
		// Other
		Color cl = Color.WHITE;
		for(int i = 0; i < messages.size(); i++) {
			String element = messages.get(i);
			JPanel test = new JPanel();
			cl = cl.darker();
			test.setBackground(cl);
			test.setBorder(BorderFactory.createLineBorder(Color.black));
			test.add("West", new JTextArea(element));
			//test.setPreferredSize(new Dimension(Integer.parseInt(window_width) - Integer.parseInt(window_rightsize), 20));

	        
	        // last
			if(i == messages.size() - 2) {
				constraints.weighty = 1;
			} else {
				constraints.weighty = 0;
			}
			
	        constraints.gridy = i;
			output.add(test, constraints);
		}
		
		
		//output.setPreferredSize(new Dimension(Integer.parseInt(window_width) - Integer.parseInt(window_rightsize), Integer.parseInt(window_height) - Integer.parseInt(window_bottomsize) - Integer.parseInt(window_buttonsize)));
		
		JScrollPane scroll_main = new JScrollPane(output); // OUTPUT
 

Ariol

Top Contributor
Nein, in deinem Fall genügt, wenn eines der Panels
Code:
weightx = 1.0;
erhält. Es geht aber natürlich auch, wenn du es an allen Panels gesetzt hast.

Stimmt natürlich. Da man aber das eine Constraints-Objekt weiterverwendet schreib ich es lieber nochmal hin.
Das spart einem manchmal das Debuggen, weil man Fehler schneller sieht.;)
 

Ariol

Top Contributor
Okay, dann weiß ich schonmal wie es Theoretisch funktionieren würde. Nun leider gibts da aber anscheinend noch ein kleiner Denkfehler.

Habe des nun in einer for-Schleife gepackt um des zu testen. messages ist eine Vector mit X beliebigen Strings,...

Java:
// Main
		JPanel output = new JPanel();
		output.setLayout(new GridBagLayout());
		
		// Settings
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridheight = GridBagConstraints.RELATIVE;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.weightx = 1.0;
		//constraints.insets = new Insets( 5, 5, 5, 5 );
		 

		constraints.anchor = GridBagConstraints.NORTH;
		

    
		// Other
		Color cl = Color.WHITE;
		for(int i = 0; i < messages.size(); i++) {
			String element = messages.get(i);
			JPanel test = new JPanel();
			cl = cl.darker();
			test.setBackground(cl);
			test.setBorder(BorderFactory.createLineBorder(Color.black));
			test.add("West", new JTextArea(element));
			//test.setPreferredSize(new Dimension(Integer.parseInt(window_width) - Integer.parseInt(window_rightsize), 20));

	        
	        // last
			if(i == messages.size() - 2) {
				constraints.weighty = 1;
			} else {
				constraints.weighty = 0;
			}
			
	        constraints.gridy = i;
			output.add(test, constraints);
		}
		
		
		//output.setPreferredSize(new Dimension(Integer.parseInt(window_width) - Integer.parseInt(window_rightsize), Integer.parseInt(window_height) - Integer.parseInt(window_bottomsize) - Integer.parseInt(window_buttonsize)));
		
		JScrollPane scroll_main = new JScrollPane(output); // OUTPUT

Code:
test.add("West", new JTextArea(element));
<-- falsch herum: erst Komponente dann Constraint
Code:
if(i == messages.size() - 2) {
<-- ist die vorletzte Komponente, du willst aber die letzte
 

Bizarrus

Bekanntes Mitglied
Es funktioniert nun. Es lag daran, dass noch gridheight mit RELATIVE gesetzt war. Ich danke euch vielmals für die sehr gute Hilfe :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
M JTable Sortierung - -zeilenweise mit Objekten verknüpfen AWT, Swing, JavaFX & SWT 4
H Swing HTML in einem JEditorPane zeilenweise hinzufügen ohne Inhalt jedes Mal neu zu laden AWT, Swing, JavaFX & SWT 4
M GridBagLayout zeilenweise füllen AWT, Swing, JavaFX & SWT 5
G Zeilenweise ausgeben! AWT, Swing, JavaFX & SWT 2
A String in JList Zeilenweise darstellen? AWT, Swing, JavaFX & SWT 4
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
S GridLayout SWT: Anordnung Composites nebeneinander AWT, Swing, JavaFX & SWT 2
M Java FX Dreidimensionale Anordnung von Objekten AWT, Swing, JavaFX & SWT 4
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
S Swing JLayeredPane Anordnung funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
D Anordnung von Elementen in JFrame AWT, Swing, JavaFX & SWT 2
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
S LayoutManager Button-Anordnung nicht wie es sein sollte AWT, Swing, JavaFX & SWT 4
T richtige anordnung mit SWT AWT, Swing, JavaFX & SWT 14
P LayoutManager vertikale anordnung AWT, Swing, JavaFX & SWT 3
L SWT Anordnung der Steuereelemente in SWT AWT, Swing, JavaFX & SWT 3
G Anordnung MenuItems nachträglich ändern AWT, Swing, JavaFX & SWT 2
A Swing JPanel Anordnung AWT, Swing, JavaFX & SWT 16
A JFrame Anordnung AWT, Swing, JavaFX & SWT 22
B Grafische Anordnung der Elemente AWT, Swing, JavaFX & SWT 2
S Probleme mit Anordnung von Komponenten im JPanel AWT, Swing, JavaFX & SWT 3
I Anordnung der Komponenten im JFrame AWT, Swing, JavaFX & SWT 4
S Anordnung von Buttons verändern AWT, Swing, JavaFX & SWT 3
V Gridbaglayout und anordnung der elemente AWT, Swing, JavaFX & SWT 7
F Anordnung im BorderLayout AWT, Swing, JavaFX & SWT 6
K Anordnung eines GridBagLayouts :) AWT, Swing, JavaFX & SWT 3
G [JOptionPane.showMessageDialog] andere Anordnung mgl? AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
T Swing Bug: mehrfache Panels bei Mouseover? AWT, Swing, JavaFX & SWT 11
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
V AWT Panels überlappen AWT, Swing, JavaFX & SWT 1
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
U Swing Panels im Contentpane durchschalten AWT, Swing, JavaFX & SWT 1
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
S Swing Plätze von 2 panels vertauschen AWT, Swing, JavaFX & SWT 4
T Panels mit Button verbinden AWT, Swing, JavaFX & SWT 3
F Swing Wie verwalte ich meine Panels richtig? AWT, Swing, JavaFX & SWT 2
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
D Stapelung von Panels AWT, Swing, JavaFX & SWT 6
V Swing MouseEvents bei gestapelten Panels AWT, Swing, JavaFX & SWT 2
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
Kenan89 LayoutManager MigLayout Positionierung von Panels AWT, Swing, JavaFX & SWT 4
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
J Problem mit der Höhe eines Panels AWT, Swing, JavaFX & SWT 11
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing (Nicht) Vergrößern von Panels AWT, Swing, JavaFX & SWT 3
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
J LayoutManager Panels übereinander AWT, Swing, JavaFX & SWT 3
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
C Aufklappbare Panels AWT, Swing, JavaFX & SWT 2
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D Vererbung von Panels AWT, Swing, JavaFX & SWT 8
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S GridBagLayout Panels AWT, Swing, JavaFX & SWT 2
W Panels vertikal anordnen AWT, Swing, JavaFX & SWT 10
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
F Abschaltbare Panels AWT, Swing, JavaFX & SWT 5
aze Layout auf Teil eines Panels anwenden AWT, Swing, JavaFX & SWT 5
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
B Java Grafiken an bestimmter Positon des Panels anzeigen AWT, Swing, JavaFX & SWT 6
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
H2SO3- AWT seltsammes verhalten eines Panels AWT, Swing, JavaFX & SWT 9
S Buttons, Panels etc. zu einer Teilkomponente hinzufügen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben