LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten?

Asamandra

Mitglied
hallo,
ich versuche gerade in meine anwendung ein jfreechart einzubauen, welches sich nach möglichkeit mit der Anwendung mitskalieren sollte.
gleichzeitig sollte aber auch immer ein abstand zwischen der freechart und dem jpanel bestehen (damit es nicht grauslich am rand klebt.
mein ansatz war nun meinem jpanel ein gridbaglayout (mit 3 rows und columns) zu geben und das jfreechart darin auf position 2 und auf fill zu setzen, dabei wird es aber leider verzerrt.

1. kann mir jemand einen tipp geben wie ich das verzerrungsproblem löse?
2. ist der ansatz grundsätzlich in ordnung? ich meine gibt es da eine art best practice wie man abstand zwischen komponenten bekommt, der sich aber auch mitskaliert?

vielen dank und lg asa

Code falls es jemandem hilft mein problem zu verstehen:
Java:
		chartPanel = new ChartPanel(chart);
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[] { 0, 0, 0 };
		gridBagLayout.rowHeights = new int[] { 0, 0, 0 };
		gridBagLayout.columnWeights = new double[] { 0.1, 1.0, 0.1 };
		gridBagLayout.rowWeights = new double[] { 0.1, 1.0, 0.1 };
		setLayout(gridBagLayout);
		GridBagConstraints gbc_chartPanel = new GridBagConstraints();
		gbc_chartPanel.fill = GridBagConstraints.BOTH;
		gbc_chartPanel.gridx = 1;
		gbc_chartPanel.gridy = 1;
		this.add(chartPanel, gbc_chartPanel);

ps: falls ich irgendwo einen thread dazu übersehen habe, möge man mir verzeihen, aber es macht keinen spaß die unzähligen threads mit den vielsagenden "gridbagproblem" titeln durchzuchecken, habe das zugegebenermaßen nach 20 mins aufgegeben..
 
die dort erklärten konzepte sind mir irgendwo klar. ich verstehe aber trotzdem nicht wie ich mein problem löse:

insets skalieren ja nicht mit der appgröße mit sondern bleiben halt xy pixel oder?
fill füllt halt alles an und verzerrt dabei - hier ist mein hauptproblem
mit weights kam ich auch nicht wirklich auf mein gewünschtes ergebnis - hier war mein chart trotz aller möglichen probierten gewichtungen zu klein

also nein sry das hilft mir nicht bei meinem konkreten problem...
 
Leere Zellen im GBL bringen nicht viel, weil sie dann von benachbarten Komponenten überschrieben werden.
Den Abstand betreffend kann ich zwei Ideen bieten:
1. Eine EmptyBorder setzen, dann hast du kein Gefuddel mit den Layoutmanagern bzw. Positionierung, aber die Größe ist halt fest.
2. "Leere" Komponenten einfügen. Schau mal die Klasse Box an, hier kannst du z.B. mit Box.createVerticalGlue() Komponenten erzeugen die mitskalieren und idR allen freien Platz benötigen.

Vielleicht genügen diese Informationen ja und du kannst vom GBL auf ein anderes, intuitiveres Layout wechseln.

Dein anderes Problem, nämlich dass dein Chart immer in einem gewissen Seitenverhältnis angezeigt werden soll musst du wohl anders lösen. Ich zumindest weiß spontan nicht wie das mit irgendeinem LayoutManager ginge.
 

Neue Themen


Zurück
Oben