Blöde Layout-Frage

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Moin,

irgendwie stehe ich gerade total auf n Schlauch - kann mir bitte jemand den Weg runter zeigen?

Ich hab ein JPanel. Dieses JPanel soll zwei Elemente anzeigen - eine (selbst geschriebene) Statistik-Komponente und die dazugehörige Legende (momentan N JLabels auf einem FlowLayout). Die Statistik-Komponente hat keine feste größe, sondern zeichnet seinen Inhalt anhand der zugewiesenen Größe des Layout-Managers (momentan BorderLayout.CENTER). Probleme bereitet mir jetzt die Legende (BorderLayout.SOUTH). Jenachdem wie viele JLabels auf meiner Legende sitzen, kann diese sich sehr in die Breite ziehen. Deshalb hätte ich gerne einen "Zeilenumbruch" im Layout, sobald ein JLabel nicht mehr angezeigt werden kann. Das macht das FlowLayout ja prinzipiell auch, leider passt es aber nicht die preferredSize an, so dass es im BorderLayout.SOUTH trotzdem nur einzeilig angezeigt wird.

Wie kann ich das umgehen?

Ich hoffe es ist einigermaßen klar, wo mein (vermutlich recht triviales) Problem liegt.

Danke!
 
S

SlaterB

Gast
Mensch, so lange dabei und noch so ein behinderter Titel und kein Beispielprogramm zum Ausprobieren..
 

The_S

Top Contributor
sorry! Titel ist mir kein besserer eingefallen und KSKB hielt ich für nicht besonders wichtig :oops:.

Code:
public class Legend extends JPanel {

	private static final long serialVersionUID =  1L;
	
	public void setData(String[] bez, int[] vals, Color[] col, String enh) {
		
		removeAll();
		setLayout(new FlowLayout(FlowLayout.LEFT));
		for (int i = 0;  i < bez.length; i++) {
			BufferedImage img = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
			Graphics2D g = img.createGraphics();
			g.setColor(col[i]);
			g.fillRect(0, 0, 10, 10);
			g.setColor(Color.BLACK);
			g.drawRect(0, 0, 10, 10);
			add(new JLabel(bez[i] + " (" + vals[i] + " " + enh + ")", new ImageIcon(img), 0));
		}
	}
	
	public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		frame.add(new JLabel("test"));
		Legend lg = new Legend();
		lg.setData(new String[] {"Eins", "Zwei", "Drei", "Vier", "Fünf"},
				   new int[] {20, 11, 104, 99, 8}, 
				   new Color[] {Color.BLACK, Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW},
				   "Dinger");
		frame.add(lg, BorderLayout.SOUTH);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(350, 200);
		frame.setVisible(true);
	}
}

Ich hätte jetzt gern, dass ich die ganze Legende sehe und zwar am Besten ohne JScrollPane. Halt so, dass sich die Höhe der Legnde verändert, wenn es von der Breite nicht mehr reinpasst.

Danke
 
S

SlaterB

Gast
interessant, interessant,

im Center-Bereich funktioniert es, im South wird auch umgebrochen aber die größere Zeilenhöhe nicht berücksichtigt,

das Legend-JPanel wird in getPreferredSize() standardmäßig nur seine einzeilige Höhe zurückgeben,
es weiß ja nix darüber, wie das äußere Layout es anzeigt,

also muss man dem Legend-JPanel entweder manuell eine größere Höhe geben
(z.B. setPreferredSize(new Dimension(1, 40)); Breite wird vom BorderLayout hier ignoriert)

oder man muss die Verarbeitung des äußeren Layouts umbauen,
inwiefern man das BorderLayout beeinflussen oder gar ändern kann, möchte ich gar nicht wissen ;)

alle anderen Layouts scheinen für mich überraschend gar nciht in Frage zu kommen?
ich habe auf die Schnelle kein anderes Layout gefunden, welches überhaupt Subpanels zum Zeilenumbruch bringen kann,
FlowLayout selber nicht, GridBagLayout und BoxLayout auch nicht,

das BorderLayout ist damit schon ziemlich gut, aber nur im Center-Bereich..


Code:
public class Flow2
    extends JFrame
{

    private static JPanel getTestPanel()
    {
        JPanel p = new JPanel();
        for (int i = 0; i < 14; i++)
        {
            p.add(new JLabel("Test " + i));
        }
        return p;
    }

    public static void main(String[] args)
    {
        Flow2 frame = new Flow2();
        // frame.getContentPane().setLayout(new FlowLayout());
        // mit FlowLayout gar kein Umbruch mehr

        frame.add(getTestPanel(), BorderLayout.CENTER);
        frame.add(getTestPanel(), BorderLayout.SOUTH);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(350, 200);
        frame.setVisible(true);
    }
}
 

The_S

Top Contributor
SlaterB hat gesagt.:
interessant, interessant

in der Tat ...

SlaterB hat gesagt.:
im Center-Bereich funktioniert es, im South wird auch umgebrochen aber die größere Zeilenhöhe nicht berücksichtigt

Meine Rede

SlaterB hat gesagt.:
das Legend-JPanel wird in getPreferredSize() standardmäßig nur seine einzeilige Höhe zurückgeben,
es weiß ja nix darüber, wie das äußere Layout es anzeigt,

Mein Problem

SlaterB hat gesagt.:
also muss man dem Legend-JPanel entweder manuell eine größere Höhe geben
(z.B. setPreferredSize(new Dimension(1, 40)); Breite wird vom BorderLayout hier ignoriert)

Dann müsste ich aber irgendwo wieder Berechnungen durchführen um zu wissen was denn jetzt so noch alles dargestellt werden kann und was nicht

SlaterB hat gesagt.:
oder man muss die Verarbeitung des äußeren Layouts umbauen,
inwiefern man das BorderLayout beeinflussen oder gar ändern kann, möchte ich gar nicht wissen ;)

Würde mir jetzt nichts sinnvolles einfallen

SlaterB hat gesagt.:
alle anderen Layouts scheinen für mich überraschend gar nciht in Frage zu kommen?
ich habe auf die Schnelle kein anderes Layout gefunden, welches überhaupt Subpanels zum Zeilenumbruch bringen kann,
FlowLayout selber nicht, GridBagLayout und BoxLayout auch nicht,

Ja, mein 2. Problem. Evtl. schreib ich mir nen eigenen Layout-Manager (hui ... noch nie gemacht, mal gucken ob das was wird :lol: ), dann aber nicht als ersatz fürs BorderLayout, sondern für das FlowLayout.

Auf jedenfall erstmal Danke. Scheinbar ist das doch nicht ganz so trivial, wie ich eigentlich vermutet habe ...
 

Auron

Mitglied
Habe mir dein LayoutManager angesehen und hat nicht ganz das erfüllt was ich wollte, also habe ich mir einen eigenen geschrieben der MaximumSize berücksichtigt, funktioniert super, auch wenn das Rumrechnen mich bisschen genervt hat. :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
S Layout - Problem AWT, Swing, JavaFX & SWT 1
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
F Layout-Problem AWT, Swing, JavaFX & SWT 2
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
B Anderen Layout-Manager verwenden AWT, Swing, JavaFX & SWT 17
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
ARadauer Wenig Material zum Thema: Design, Layout, Usability von Swing Anwendungen AWT, Swing, JavaFX & SWT 11
S LayoutManager Welcher LayoutManager für dieses zweispaltige Layout? AWT, Swing, JavaFX & SWT 13
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
A Best practice für konkretes Layout AWT, Swing, JavaFX & SWT 10
G LayoutManager Layout für Spalten AWT, Swing, JavaFX & SWT 8
A Layout/JPanelgröße AWT, Swing, JavaFX & SWT 6
S pack() bei null-Layout AWT, Swing, JavaFX & SWT 10
C SWT Tabellen-Layout in StyledText? AWT, Swing, JavaFX & SWT 6
J LayoutManager Welchen Layout/Design-Manager? AWT, Swing, JavaFX & SWT 4
R Swing Layout setzen AWT, Swing, JavaFX & SWT 3
L Layout automatische Anpassung umgehen? AWT, Swing, JavaFX & SWT 5
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
J Button Layout anpassen AWT, Swing, JavaFX & SWT 22
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
B Buttongröße im Layout AWT, Swing, JavaFX & SWT 4
B LayoutManager Layout Problem AWT, Swing, JavaFX & SWT 14
O LayoutManager Layout entwerfen AWT, Swing, JavaFX & SWT 3
A diverse Layout-Fragen AWT, Swing, JavaFX & SWT 4
F LayoutManager Eigenes Layout die Lösung?! AWT, Swing, JavaFX & SWT 4
dzim SWT Layout mit Sections aus Eclipse Forms AWT, Swing, JavaFX & SWT 17
F JScrollPane verwirft Layout von JPanel AWT, Swing, JavaFX & SWT 2
C LayoutManager Layout und vergrößern des Frames AWT, Swing, JavaFX & SWT 5
E Swing Runde Buttons / Position eines Obj. im Layout AWT, Swing, JavaFX & SWT 7
S Swing UI-Elemente ordnen sich ungewollt in einer Reihe (ohne Layout) AWT, Swing, JavaFX & SWT 5
A Ungewollte Layout änderungen AWT, Swing, JavaFX & SWT 3
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
E JPanel mit Null Layout entfernt Buttons AWT, Swing, JavaFX & SWT 11
N Swing Layout positionieren AWT, Swing, JavaFX & SWT 2
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
H LayoutManager Dynamisches Layout AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben