LayoutManager Eigener LayoutManager funktioniert nicht.

Volvagia

Top Contributor
Ich habe gerade versucht, meinen ersten eigenen LayoutManager zu schreiben. Leider funktioniert er nicht richtig. Wenn ich etwas hinzufüge, sieht man am Ende nichts. :noe: Kann mir jemand bitte sagen, was da schief läuft?
Er soll wie das FlowLayout, nur Senkrecht funktionieren. Und die Größe nach der Pref. Size setzen.

Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.util.LinkedList;
import java.util.List;

public class VerticalFlowLayout implements LayoutManager
{
	private int DEFAULT_H_GAPS = 5;
	private int DEFAULT_V_GAPS = 2;
	
	private int hgaps;
	private int vgaps;
	
	private List<Component> componentList;
	
	public VerticalFlowLayout()
	{
		super();
		hgaps = DEFAULT_H_GAPS;
		vgaps = DEFAULT_V_GAPS;
		componentList = new LinkedList<Component>();
	}
	public void addLayoutComponent(String level, Component comp)
	{
		componentList.add(comp);
	}
	public Dimension preferredLayoutSize(Container parent)
	{
		return minimumLayoutSize(parent);
	}
	public Dimension minimumLayoutSize(Container parent)
	{
		return(new Dimension(0, 0));
	}
	public void layoutContainer(Container parent)
	{
		int currentX = hgaps;
		int currentY = vgaps;
		Dimension parentSize = parent.getSize();
		
		for(int i = 0, size = componentList.size(); i < size; i++)
		{
			Component c = parent.getComponent(i);
			Dimension prefSize = c.getPreferredSize();
			
			c.setSize(prefSize);
			
			currentY+= prefSize.height;
			
			if(currentY > parentSize.height)
				currentY = vgaps;
			currentX+= prefSize.width + hgaps;
			
			c.setLocation(currentX, currentY);
		}
	}
	public void removeLayoutComponent(Component comp)
	{
		componentList.remove(comp);
	}
}
 
Zuletzt bearbeitet:

Michael...

Top Contributor
...wobei die Komponenten natürlich auch den Parent Container hinzugefügt werden müssen.
Eventuell liegts auch daran, dass die PreferredSize = MinimalSize = 0x0 ist.
 

Volvagia

Top Contributor
Danke. Mir ist aufgefallen, dass #addLayoutComponent(String, Component) garnicht automatisch aufgerufen wird. Wenn ich das explizit beim Hinzufügen zum Parent aufrufe, funktioniert es. Zwar nicht richtig, aber es funktioniert. Aber sollte das nicht automatisch passieren?
 

Michael...

Top Contributor
Nutze mal LayoutManager2 und verwende die
Code:
public void addLayoutComponent(Component comp, Object constraints)
 

Volvagia

Top Contributor
Vielen Dank, ich glaube jetzt läuft es einwandfrei.:) Zumindest ist mir noch nichts negatives aufgefallen.
Hier einmal mein Endsource, falls jemand etwas damit anfangen kann:

Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager2;
import java.util.LinkedList;
import java.util.List;

public class VerticalFlowLayout implements LayoutManager2
{
	private static final int DEFAULT_H_GAPS = 5;
	private static final int DEFAULT_V_GAPS = 2;
	
	private int hgaps;
	private int vgaps;

	private List<Component> componentList;
	private Dimension componentSize;
	
	private Dimension preferredLayoutSize;
	
	public VerticalFlowLayout()
	{
		this(DEFAULT_H_GAPS, DEFAULT_V_GAPS);
	}
	public VerticalFlowLayout(int hgaps, int vgaps)
	{
		super();
		
		this.hgaps = hgaps;
		this.vgaps = vgaps;
		componentSize = new Dimension();
		preferredLayoutSize = new Dimension();
		componentList = new LinkedList<Component>();
	}
	public void addLayoutComponent(String level, Component comp)
	{
		addLayoutComponent(comp, null);
	}
	public void addLayoutComponent(Component comp, Object constraints)
	{
		Dimension prefSize = comp.getPreferredSize();
		componentSize.width = Math.max(prefSize.width, componentSize.width);
		componentSize.height = Math.max(prefSize.height, componentSize.height);
		
		if(!componentList.contains(comp))
			componentList.add(comp);
	}
	public Dimension preferredLayoutSize(Container parent)
	{
		return minimumLayoutSize(parent);
	}
	public Dimension minimumLayoutSize(Container parent)
	{
		int parentHeight = parent.getHeight();
		int compHeight = componentSize.height;
		int compWidth = componentSize.width;
		int compsOnYAxis = parentHeight / compHeight;
		if(compsOnYAxis == 0)
			return(new Dimension(0, 0));
		
		int compsOnXAxis = componentList.size() / compsOnYAxis;
		
		preferredLayoutSize.width = compsOnXAxis * compWidth + compsOnXAxis * hgaps;
		return(preferredLayoutSize);
	}
	public void layoutContainer(Container parent)
	{
		int currentX = hgaps;
		int currentY = vgaps;
		Dimension parentSize = parent.getSize();
		
		for(int i = 0, size = componentList.size(); i < size; i++)
		{
			Component c = componentList.get(i);
			Dimension prefSize = c.getPreferredSize();
			
			c.setSize(prefSize);
			c.setLocation(currentX, currentY);
			
			currentY+= prefSize.height + vgaps;
			
			if(currentY > parentSize.height - prefSize.height)
			{
				currentY = vgaps;
				currentX+= prefSize.width + hgaps;
			}
		}
	}
	public void removeLayoutComponent(Component comp)
	{
		componentList.remove(comp);
	}

	public Dimension maximumLayoutSize(Container target)
	{
		return(null);
	}
	public float getLayoutAlignmentX(Container target)
	{
		return 0;
	}
	public float getLayoutAlignmentY(Container target)
	{
		return 0;
	}
	public void invalidateLayout(Container target) {}
}

Die Componenten richten sich jetzt nach den mit der größten Pref. size, wobei Höhe und Breite getrennt betrachtet werden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J eigener Layoutmanager? AWT, Swing, JavaFX & SWT 6
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
K eigener button in swing AWT, Swing, JavaFX & SWT 3
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
S Eigener Syntax Highlighter - Problem AWT, Swing, JavaFX & SWT 5
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
N 2D-Grafik RTF in eigener JComponent AWT, Swing, JavaFX & SWT 2
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
N jComboBox und eigener Datentyp AWT, Swing, JavaFX & SWT 8
Q Eigener Colorchooser AWT, Swing, JavaFX & SWT 2
C Swing eigener InputDialog AWT, Swing, JavaFX & SWT 6
L Swing Falscher Wert nach eigener Sortierung (JTable) AWT, Swing, JavaFX & SWT 2
R JTable - eigener Editor - Mouse events AWT, Swing, JavaFX & SWT 2
S Mit eigener Klasse auf GUI-Elemente zugreifen AWT, Swing, JavaFX & SWT 3
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
O Eigener Button AWT, Swing, JavaFX & SWT 8
data89 Eigener Button variiert in der Größe - Hilfee! AWT, Swing, JavaFX & SWT 5
A Nimbus eigener Painter funzt nicht AWT, Swing, JavaFX & SWT 11
O AWT Zeichne mit eigener Farbe AWT, Swing, JavaFX & SWT 3
A Aufrufen eigener Klasse AWT, Swing, JavaFX & SWT 8
M Eigenes ActionEvent / Eigener Listener AWT, Swing, JavaFX & SWT 2
G SWT DatePicker funzt nicht in eigener Anwendung AWT, Swing, JavaFX & SWT 5
J Problem mit eigener Titelleiste und MouseMotionListener AWT, Swing, JavaFX & SWT 2
F Eigener Observer? AWT, Swing, JavaFX & SWT 4
H eigener Editor und JList als PopMenu AWT, Swing, JavaFX & SWT 6
M Brauche Hilfe zum Einbinden von eigener Schrfitart AWT, Swing, JavaFX & SWT 3
m@nu Problem mit eigener TableCellEditor-Impelemtierung AWT, Swing, JavaFX & SWT 5
clemson Edtor mit anzeigen eigener Tags AWT, Swing, JavaFX & SWT 8
V SWT eigener Renderer? + wo gibts die Sourcen für SWT 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
TheWhiteShadow Swing suche passenden LayoutManager AWT, Swing, JavaFX & SWT 8
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
N LayoutManager suche LayoutManager für Tabellenstruktur AWT, Swing, JavaFX & SWT 2
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
hdi SWT Suche passenden LayoutManager AWT, Swing, JavaFX & SWT 5
C passender layoutmanager gesucht AWT, Swing, JavaFX & SWT 2
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
E Swing Suche LayoutManager AWT, Swing, JavaFX & SWT 5
E Layoutmanager mit fester Breite gesucht AWT, Swing, JavaFX & SWT 9
R Layoutmanager AWT, Swing, JavaFX & SWT 13
K Swing JInternalFrame und LayoutManager AWT, Swing, JavaFX & SWT 6
W LayoutManager Hell AWT, Swing, JavaFX & SWT 2
P JPanel: LayoutManager und trotzdem absolut positionieren? AWT, Swing, JavaFX & SWT 3
M JLabel mit Layoutmanager AWT, Swing, JavaFX & SWT 2
G Layoutmanager mit festem Gitter AWT, Swing, JavaFX & SWT 6
R getInsets ohne Layoutmanager AWT, Swing, JavaFX & SWT 7
R LayoutManager ähnlich BorderLayout, mit einer Ausnahme AWT, Swing, JavaFX & SWT 2
T Layoutmanager der vorhanden Platz beruecksichtigt? AWT, Swing, JavaFX & SWT 5
J LayoutManager der Elemente untereinander anordnet. AWT, Swing, JavaFX & SWT 11
F Der richtige Layoutmanager AWT, Swing, JavaFX & SWT 6
G LayoutManager und Abstand AWT, Swing, JavaFX & SWT 6
A LayoutManager-Wünsche AWT, Swing, JavaFX & SWT 16
T % von Komponenten unter Layoutmanager AWT, Swing, JavaFX & SWT 2
M Layoutmanager und Komponente AWT, Swing, JavaFX & SWT 2
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
G Fenster mit LayoutManager AWT, Swing, JavaFX & SWT 3
C Verschachtelung von JPanels mit verschiedenen LayoutManager AWT, Swing, JavaFX & SWT 4
T JInternalFrame Konflikt mit LayoutManager AWT, Swing, JavaFX & SWT 5
S JTextField ohne LayoutManager positionieren AWT, Swing, JavaFX & SWT 3
F PanelBounds an TextPaneBounds anpassen LayoutManager: Null AWT, Swing, JavaFX & SWT 2
B Welchen LayoutManager? AWT, Swing, JavaFX & SWT 17
S Wie funktioniert der LayoutManager? AWT, Swing, JavaFX & SWT 9
P Zeichnen + LayoutManager AWT, Swing, JavaFX & SWT 7
B Layoutmanager Tutorial AWT, Swing, JavaFX & SWT 15
M LayoutManager Informationen AWT, Swing, JavaFX & SWT 4
L LayoutManager ähnlich wie FlowLayout AWT, Swing, JavaFX & SWT 5
S Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 6
D LayoutManager und JPanel AWT, Swing, JavaFX & SWT 9
J Welcher Layoutmanager? AWT, Swing, JavaFX & SWT 20
L Probleme mit Scrollbar und LayoutManager AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben