Swing suche passenden LayoutManager

TheWhiteShadow

Bekanntes Mitglied
Hallo zusammen,

ich suche ein LayoutManager für folgendes Problem:

Ich hab ein JPanel mit mehreren verschieden-viel und -große Elementen in einer JScrollPane.
Die JScrollPane hat eine feste Größe. Die Elemente nicht.
Die Elemente sollen als eine Liste von oben nach unten angezeigt werden.

Folgende Versuche hab ich bereits gemacht:
FlowLayout: wäre super, wenn es von oben nach unten ginge. Tut es aber nicht.
BoxLayout: Zentriert die Elemente, wenns zu wenig sind.
GridBagLayout: gleiches Problem. anchor=NORTH funktionierte nicht.
GridLayout: nur für gleichgroße Elemente.

Eine Glue-Komponente wollte auch nicht so richtig.
Hab die Elemente als auch das JPanel mit TOP_ALIGNMENT versehen.

Muss ich jetzt tatsächlich ein eigenen LayoutManager für ne einfache Liste schreiben?
Das kann doch nicht sein. Da muss es doch noch was geben, was ich übersehen hab.
 

KrokoDiehl

Top Contributor
Ich glaube dass man nur in sehr speziellen Fällen einen eigenen LayoutManager schreiben muss. Es gibt neben den Standard-Swing-LayoutManagern auch ein paar freie, die man sich mal anschauen kann, z.B. TableLayout oder FormLayout.
Was du beschreibst klingt jedoch so, als könne man es z.B. mit einem GridBagLayout oder einem GroupLayout hinbekommen. Beide nicht völlig intuitiv aber durchaus potent und es Bedarf nicht selten etwas Propiererei bis man sein Ziel hat.

In vielen Fällen werden Layouts auch kombiniert. Zum Beispiel für die horizontalen Elemente ein JPanel mit FlowLayout, für die vertikalen dann ein BoxLayout mit jenen Panels.

Wenn du eine Skizze von deiner Wunschmaske abliefern kannst bin ich sicher, dass es den einen oder andern Forenleser reizt ein paar Codevorschläge zu posten :)
 

TheWhiteShadow

Bekanntes Mitglied
Eigentlich hab ich selten Probleme mit Layouts, aber heute will es einfach nicht.

So sol es in etwa aussehen (JScrollPane ist nicht ganz ausgefüllt):
unbenantttnt1.png


Bei bisher allen Layouts, die eine vertikale Auflistung hinbekommen haben, wurden die Elemente im blauen Bereich Zentriert dargestellt, was nicht gewollt ist.

GridBagLayout hat wie bereits erwänt nicht so funktioniert wie gewollt.
GroupLayout brachte übrigens das Gleiche.
Kombinieren kann man da nicht viel.
FormLayout, TableLayout. Das hört sich so an, als wären die ähnlich dem GridBagLayout.
 

XHelp

Top Contributor
Wenn dich FlowLayout glücklich gemacht hat: man kann es auch vertikal einstellen, siehe die Konstruktoren.

P.S.
Ist das ungefähr das, was du haben wolltest?
Java:
public class PanelScrollTest {

public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(200, 500);
		JPanel panel = new JPanel();
		panel.setLayout(new GridBagLayout());
		panel.setBackground(Color.CYAN);
		addSomeComponents(panel);
		JScrollPane scrollPane = new JScrollPane(panel);
		frame.add(scrollPane);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public static void addSomeComponents(JPanel panel) {
		Random numGen = new Random();
		for (int i = 0; i < 10; i++) {
			GridBagConstraints gbc = new GridBagConstraints();
			gbc.insets = new Insets(10, 10, 10, 10);
			gbc.fill = GridBagConstraints.HORIZONTAL;
			gbc.weightx = 1f;
			gbc.gridy = i;
			JPanel comp = new JPanel();
			comp.setBackground(new Color(numGen.nextInt(256), numGen
					.nextInt(256), numGen.nextInt(256)));
			comp.setPreferredSize(new Dimension(100, numGen.nextInt(300) + 20));
			panel.add(comp, gbc);
		}
	}
}
 
Zuletzt bearbeitet:

TheWhiteShadow

Bekanntes Mitglied
Abgesehen davon, dass dein Fenster herlich bunt ist^^ zeigt es den gleichen Fehler, den ich auch hab.
bei 2-3 Elementen ist die Fläche nämlich nicht ausgefüllt und die Elemente zentriert, was ich vermeiden wollte.

sieh hier:
unbenareennt.png


Wenn dich FlowLayout glücklich gemacht hat: man kann es auch vertikal einstellen, siehe die Konstruktoren.

Hab alle Konstanten duchprobiert. Ohne Erfolg.

Edit: Das Layout hier ist perfekt.
http://www.java-forum.org/awt-swing-swt/73452-flowlayout-alternative.html#post451696
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Falls es dir hilft, der selbe Anwendungsfall war der Hauptgrund warum ich mich ins Grouplayout eingearbeitet habe. Das geht damit nämlich sehr gut.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;


public class VerticalFlow extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VerticalFlow frame = new VerticalFlow();
					frame.setVisible(true);
					frame.pack();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VerticalFlow() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 348);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setPreferredSize(new Dimension(200, 600));
		contentPane.add(scrollPane);
		
		JPanel panel = new JPanel();
		scrollPane.setViewportView(panel);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		panel_1.setBackground(Color.YELLOW);
		panel_1.setPreferredSize(new Dimension(100, 50));
		
		JPanel panel_2 = new JPanel();
		panel_2.setPreferredSize(new Dimension(100, 100));
		panel_2.setBackground(Color.RED);
		panel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		
		JPanel panel_3 = new JPanel();
		panel_3.setBackground(Color.GREEN);
		panel_3.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		panel_3.setPreferredSize(new Dimension(150, 300));
		GroupLayout gl_panel = new GroupLayout(panel);
		gl_panel.setAutoCreateGaps(true);
		gl_panel.setAutoCreateContainerGaps(true);
		gl_panel.setHorizontalGroup(
			gl_panel.createParallelGroup(Alignment.CENTER)
				.addComponent(panel_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				.addComponent(panel_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
				.addComponent(panel_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
		);
		gl_panel.setVerticalGroup(
			gl_panel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel.createSequentialGroup()
					.addComponent(panel_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addComponent(panel_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addComponent(panel_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
		);
		panel.setLayout(gl_panel);
	}

}
 

TheWhiteShadow

Bekanntes Mitglied
Das GroupLayout ist nicht schlecht, gerade für komplexere Anordungsmodelle, aber erfordert extrem viel Code, ist unübersichtlich und ich hab mich noch nicht so sehr darin eingearbeitet.
Versucht hatte ich es, aber mir fehle vermutlich:
Java:
addComponent(panel_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE);

Meißtens hat das GridBagLayout ja ausgereicht welches wenigstens durch die GridBagConstraints eine kurze übersichtliche Syntax hat.

Für eine Anordnung ähnlich dem FlowLayout sind mMn beide Manager unpraktisch.
 
G

Gast2

Gast
Schau dir mal Forms Layout an. Damit gehts extrem einfach und die API ist gut beschrieben. Hier im Forum gibts dazu auch shcon einige Threads.
 

bERt0r

Top Contributor
Meißtens hat das GridBagLayout ja ausgereicht welches wenigstens durch die GridBagConstraints eine kurze übersichtliche Syntax hat.
MMn sind die GridBagConstraints das unübersichtlichste und klobigste in der standard JavaAPI. Und bezüglich Codelänge ist das GroupLayout um 2 Zeilen Länger (bzgl. Layout Code, das sind nur 16 Zeilen). Im gridbagLayout brauchst du mindestens 2 Zeilen Code pro Component, normalerweise aber eher so um die 5-6. Im GroupLayout kommst du immer mit 2 aus.

Für eine kleine Einführung ins GroupLayout schau dir mal diesen Thread an: http://www.java-forum.org/awt-swing-swt/127923-grouplayout.html
Ich glaube ich sollte mal ein Tutorial fürs GroupLayout schreiben, das wird von vielen einfach missverstanden. WindowProBuilder z.b erzeugt katastrophale Ergebnisse mit dem GroupLayout, weil er die Sache viel zu kompliziert angeht. Du kannst dier das Grouplayout wie ein <table> in html vorstellen. Die <tr> Elemente sind die Groups, die <td> Elemente die Componenten. Der Unterschied der viele verwirrt ist, dass die <tr> Elemente sowohl Zeilen als auch Spalten sein können - es bleibt dir überlassen wie du es aufziehst. Die meisten GUIs lassen sich aber einfach nach einem Tabellenmuster aufbauen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
hdi SWT Suche passenden LayoutManager AWT, Swing, JavaFX & SWT 5
hdi JTable -> Suche passenden Listener AWT, Swing, JavaFX & SWT 10
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Maks16 JavaFX ominöse Mails in meinem Suche Postfach von Outlook Sharepoint AWT, Swing, JavaFX & SWT 4
S JavaFX Suche Literatur für JavaFX Einstieg AWT, Swing, JavaFX & SWT 8
P LookAndFeel Suche Buch und Beispielprojekte für gute Designs AWT, Swing, JavaFX & SWT 4
L [SUCHE] Tutorial zur grafischen Nutzeroberflächengestaltung AWT, Swing, JavaFX & SWT 6
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
I Suche in einem Text AWT, Swing, JavaFX & SWT 4
hdi LookAndFeel Suche: Substance L&F AWT, Swing, JavaFX & SWT 4
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
G DB-Suche in GUI AWT, Swing, JavaFX & SWT 4
C Live Suche mit TextFeld AWT, Swing, JavaFX & SWT 2
A Swing suche OpenSource Date(Time)Picker Komponente AWT, Swing, JavaFX & SWT 9
A LookAndFeel Suche richtige Technologie für eine bestimme Desginvorlage AWT, Swing, JavaFX & SWT 5
N LayoutManager suche LayoutManager für Tabellenstruktur AWT, Swing, JavaFX & SWT 2
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
Nicer LookAndFeel Suche noch LaFs AWT, Swing, JavaFX & SWT 7
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
E Swing JTree Filter Suche mit Collapse?! AWT, Swing, JavaFX & SWT 4
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
Nicer LookAndFeel Suche LaFs AWT, Swing, JavaFX & SWT 12
N Suche nach Komponente / LaF AWT, Swing, JavaFX & SWT 21
V [SUCHE]GUI Programmier Tutorial[Netbeans] AWT, Swing, JavaFX & SWT 8
M Suche passende Chart Library LGPL/kommerziell AWT, Swing, JavaFX & SWT 14
E Swing Suche LayoutManager AWT, Swing, JavaFX & SWT 5
hdi Swing Suche nach passendem Layout AWT, Swing, JavaFX & SWT 8
P Suche freien Date und Time Picker AWT, Swing, JavaFX & SWT 3
hdi Swing Suche passende API Klasse(n) für meine Komponente AWT, Swing, JavaFX & SWT 8
ModellbahnerTT Suche bessere Methode AWT, Swing, JavaFX & SWT 4
M Suche Java Komponente AWT, Swing, JavaFX & SWT 2
newcron Suche die hässlichsten Swing GUIs AWT, Swing, JavaFX & SWT 4
A Suche TreeTable-Komponente AWT, Swing, JavaFX & SWT 12
C Suche fertigen HTML editor AWT, Swing, JavaFX & SWT 2
V Suche "Einblendeffekt" AWT, Swing, JavaFX & SWT 6
V Suche Komponente AWT, Swing, JavaFX & SWT 2
D Suche Framework um Grafikprogramm zu schreiben. AWT, Swing, JavaFX & SWT 36
Q Suche "Ablaufplan" für Swing-Fensterwechsel? AWT, Swing, JavaFX & SWT 2
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
A Suche analoge Uhr in Java AWT, Swing, JavaFX & SWT 9
M Jlist Eintrag mit suche selektieren AWT, Swing, JavaFX & SWT 4
W Suche großes vollständiges Swing GUI Beispiel nach MVC Model AWT, Swing, JavaFX & SWT 5
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
B Suche eine GUI-Komponente AWT, Swing, JavaFX & SWT 2
G Listener Suche für F1 AWT, Swing, JavaFX & SWT 25
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
E Suche kostenloses Iconset für Swing (Ocean) AWT, Swing, JavaFX & SWT 4
M Suche Komponente für mehrere 100.000 Zeile Text AWT, Swing, JavaFX & SWT 3
C suche 1.3er - compatible Version von Swing-layout AWT, Swing, JavaFX & SWT 15
S Ich suche ein Darstellungselement AWT, Swing, JavaFX & SWT 2
T Suche Methode zum anzeigen eines Textteils im JPasswordfield AWT, Swing, JavaFX & SWT 2
N [Suche] JTree Widget/Library. AWT, Swing, JavaFX & SWT 2
M auf der suche nach einer komponente AWT, Swing, JavaFX & SWT 3
G suche Actionlistener der "Loslassen" eines Buttons AWT, Swing, JavaFX & SWT 5
G Suche Tutorial zum Thema jdbc/SQL/Select/JTable AWT, Swing, JavaFX & SWT 9
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
H Suche Quelltext für einen einfachen Animationsthread AWT, Swing, JavaFX & SWT 8
EagleEye suche Tutorial(s) für JTable AWT, Swing, JavaFX & SWT 2
G Suche einen KeyEvent für die Taste "ä" AWT, Swing, JavaFX & SWT 7
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
R Swing Welche LayoutManager sind die richtigen für mich? AWT, Swing, JavaFX & SWT 11
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Z Swing Welcher Layoutmanager bei ScrollPane? AWT, Swing, JavaFX & SWT 4
F Welchen Layoutmanager verwenden? AWT, Swing, JavaFX & SWT 2
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
N Welcher LayoutManager AWT, Swing, JavaFX & SWT 16
Birke Swing Neue Swing LayoutManager: TOnion Projekt AWT, Swing, JavaFX & SWT 10
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
F Swing Layoutmanager für Mittplatzierung ? AWT, Swing, JavaFX & SWT 6
B SWT Dynamische GUI (Layoutmanager?) AWT, Swing, JavaFX & SWT 2
J Welche(n) LayoutManager für große Gui? AWT, Swing, JavaFX & SWT 6
D Layoutmanager in Java Swing vs. Java AWT AWT, Swing, JavaFX & SWT 3
P Layoutmanager-Richtlinie ? AWT, Swing, JavaFX & SWT 8
J 2 Bereiche im Frame komplett nutzen - Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 3
SexyPenny90 Welcher LayoutManager erfüllt meine Bedingung AWT, Swing, JavaFX & SWT 7
C SWT LayoutManager AWT, Swing, JavaFX & SWT 2
L LayoutManager macht nichts AWT, Swing, JavaFX & SWT 19
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
R Layoutmanager AWT, Swing, JavaFX & SWT 4
M Fenster aufteilen, aber mit welchem LayoutManager? AWT, Swing, JavaFX & SWT 10
G LayoutManager LayoutManager gesucht AWT, Swing, JavaFX & SWT 2
R Swing Variable Panelbreite ohne Layoutmanager AWT, Swing, JavaFX & SWT 6
R LayoutManager Problem mit setLayout(LayoutManager) AWT, Swing, JavaFX & SWT 9
F Anfängerfrage: Swing und LayoutManager AWT, Swing, JavaFX & SWT 4
V LayoutManager Eigener LayoutManager funktioniert nicht. AWT, Swing, JavaFX & SWT 5
D LayoutManager JPanels ohne LayoutManager platzieren AWT, Swing, JavaFX & SWT 6
Ollek JTextField Verhalten mit LayoutManager AWT, Swing, JavaFX & SWT 8
B LayoutManager mischen keine gute Idee? AWT, Swing, JavaFX & SWT 9
C passender layoutmanager gesucht AWT, Swing, JavaFX & SWT 2
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
E Layoutmanager mit fester Breite gesucht AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben