Breite des Containers ist gegeben - wie die Höhe berechnen?

Status
Nicht offen für weitere Antworten.

Tobias

Top Contributor
Hi,

ich steh seit ein paar Tagen vor folgendem Problem: Ich habe einen Container (ein JPanel), dessen Breite ich explizit festlegen will. Die Höhe soll in Abhängigkeit der enthaltenen Komponenten berechnet werden (z.B. vom LayoutManager).

Wie mache ich das?

mpG
Tobias
 

Marco13

Top Contributor
Hm... vielleicht meinst du sowas wie
myPanel.setPreferredSize(new Dimension(width, myPanel.getPreferredSize().height));
!? Kommt auf den genauen Zusammenhang an. (BTW: Solange man nicht setPreferredSize gemacht hat, wird die PreferredSize automatisch auf Basis den aktuellen Layouts (und der preferredSizes der enthaltenen Compoments) berechnet
 

Tobias

Top Contributor
Ok, ich hole mal etwas weiter aus.

Für meine Diplomarbeit schreibe ich eine XUL-Implementierung (eigener Dialekt), die unter anderem auf Swing umgesetzt wird. Sprich: Der User schreibt XML-Dateien, die die Oberfläche beschreiben, mein Programm rendert daraus eine Swingoberfläche. In diesen XML-Dateien kann die Größe einzelner Komponenten mittels "width"- und "height"-Attributen vorgegeben werden. Es müssen aber nicht beide Größen angegeben sein.

Zunächst werden die Höhen- und Breitenangaben im XML-File ja auch nur im XUL-Model zwischengespeichert, wo sie keine Probleme machen. Ein nicht existierender Wert wird durch -1 symbolisiert. Diese Werte lassen sich vernünftigerweise nicht 1:1 in Swing übertragen (wenn eine Angabe fehlt), weil eine Komponente mit Breite oder Höhe kleiner 0 nicht angezeigt wird.

Problem ist jetzt zum Beispiel folgendes:
Ich habe ein Panel, für das eine maximale Breite von 400px im XUL-File gegeben ist. Befrage ich den LayoutManager des Panels danach, was er als preferredSize vorschlägt, erhalte ich 4056x22 Pixel, weil das Panel einen langen Text enthält, der vom LayoutManager in eine Zeile gepackt wird (Das Panel liegt in einer JScrollPane, so das theoretisch unendlich viel Platz vorhanden ist). Mit dieser berechneten Höhe kann ich nichts anfangen, weil ein mehrfach umgebrochener Text natürlich deutlich mehr Platz in Anspruch nimmt.

Wie kann ich also den LayoutManager (oder das UI, je nachdem, wer denn letztlich die PreferredSize berechnet) dazu zwingen, zu beachten, das der Elterncontainer nicht breiter als 400px werden soll? Beim Resizen des Fensters macht der LayoutManager doch auch nichts anderes: Die Größe des Containers ändert sich, also müssen die Kinder neu angeordnet werden.

mpG
Tobias
 

Marco13

Top Contributor
Ahso... Die Sache mit dem Layout und der PreferredSize arbeitet (aus der (schwammigen) Erinnerung, und stark vereinfacht) etwa so
Code:
Dimension getPreferredSize()
{
    if (preferredSizeWasExplicitylSet) return thePreferredSizeThatWasSet;
    else return computeThePreferredSizeBasedUponThePreferredSizeOfAllChildComponentsAccordingToTheCurrentLayout();
}
Bei TextComponents ist das nochmal was anderes, da die Größe da von den rows/colums abhängt. Und jetzt soll bei dir aber die Größe einer Child-Component soll durch die Größe einer Parent-Component beschränkt werden!? Das passt nicht so ganz in das Konzept.... Beim resizen eines Fensters wird der Inhalt zwar neu layouted, aber das passiert komplet Top-Down - und wenn der Inhalt zu groß ist, wird er einfach nicht ganz agezeigt. :? Hm. Hab' gerade keinen Entwicklungs-PC zur Hand, nur mal ein bißchen im Quellcode con JComponent, JTextArea & Co gewühlt, aber nichts hilfreiches gefunden. Sorry - vielleicht hat ja noch jemand eine Idee.... :?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
G JavaFX - bugs bei der ermittlung der breite der nodes AWT, Swing, JavaFX & SWT 3
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
C JavaFX TableColumn - TableColumn Breite AWT, Swing, JavaFX & SWT 8
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
A trotz setSize keine breite AWT, Swing, JavaFX & SWT 4
M Wie ermittele ich die Breite und Höhe meines Displays in Pixel AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
S JTable Spalte "normale" Breite? AWT, Swing, JavaFX & SWT 5
N Swing Optimale Höhe eine JTextPanes bei festgelegter Breite bestimmen AWT, Swing, JavaFX & SWT 23
L TreeViewerColumn - gesamte TreeView-breite nutzen? AWT, Swing, JavaFX & SWT 5
M 2 Buttons mit derselben Breite AWT, Swing, JavaFX & SWT 9
4 Shapes Informationen wie Breite usw. mitgeben AWT, Swing, JavaFX & SWT 5
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ Swing JComboBox | Breite des Scrollbalkens AWT, Swing, JavaFX & SWT 4
D JFreeChart Breite (width) ändern AWT, Swing, JavaFX & SWT 6
Rudolf Swing Swing Button breite stanardisieren AWT, Swing, JavaFX & SWT 2
N Swing JPanel Nur Breite festlegen AWT, Swing, JavaFX & SWT 7
M breite eines "drawString()-Strings" AWT, Swing, JavaFX & SWT 2
F JTabbedPane Reiter breite AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Problem mit höhe||breite eines JFrames AWT, Swing, JavaFX & SWT 4
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
H SWT Breite von componenten zu bestimmen AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
N breite von JList festlegen AWT, Swing, JavaFX & SWT 3
E Layoutmanager mit fester Breite gesucht AWT, Swing, JavaFX & SWT 9
reibi SWT Breite Taskleiste herausfinden AWT, Swing, JavaFX & SWT 2
C Breite JTextArea/JScrollPane setzen AWT, Swing, JavaFX & SWT 4
S Swing JTable: Spalten mit relativer Breite im ungleichmäßigen Verhältnis AWT, Swing, JavaFX & SWT 2
M Swing JTable + JScrollPane (Breite und Höhenproblem) AWT, Swing, JavaFX & SWT 1
S Für Breite und Höhe werden 0.0 angezeigt AWT, Swing, JavaFX & SWT 2
C Swing JTextArea mit fester Breite und angepasster Höhe??? AWT, Swing, JavaFX & SWT 8
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
D JtoolBar feste Breite ? AWT, Swing, JavaFX & SWT 13
P Breite und Höhe des contentPane abfragen AWT, Swing, JavaFX & SWT 3
Y Einzigartigkeit des GridBagLayout - individuelle Höhe/Breite AWT, Swing, JavaFX & SWT 4
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
V Swing: Konstant breite Sidebar AWT, Swing, JavaFX & SWT 2
D Breite eines JScrollPane AWT, Swing, JavaFX & SWT 3
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
G JMenu problem mit der Breite von einer JCheckBox AWT, Swing, JavaFX & SWT 2
A JTextFiled-Breite und Höhe ändern AWT, Swing, JavaFX & SWT 3
B horizontale bzw. vertikale JScrollBar breite von JScrollPane AWT, Swing, JavaFX & SWT 5
S JTable - Breite der Linien AWT, Swing, JavaFX & SWT 8
D GridBagLayout: 2. Spalte auf JPanel-Breite expandieren AWT, Swing, JavaFX & SWT 2
S Feste Breite und Höhe für einen formatierten Text. AWT, Swing, JavaFX & SWT 5
F JTable: Spaltenbreiten an Breite der Zelleninhalte anpassen AWT, Swing, JavaFX & SWT 5
lhein Breite der Scrollbar in einer Combobox ändern AWT, Swing, JavaFX & SWT 5
G Klasse Image - Höhe und Breite ermitteln AWT, Swing, JavaFX & SWT 12
Z Column Breite in JTable automatisch an Inhalt anpassen AWT, Swing, JavaFX & SWT 3
R Breite von JTextField in einem GridBagLayout begrenzen AWT, Swing, JavaFX & SWT 3
P Breite eines JScrollbar vergrößern, aber wie? AWT, Swing, JavaFX & SWT 8
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
K JTextfield - breite AWT, Swing, JavaFX & SWT 3
S JPanel in JScrollPane in der Breite begrenzen AWT, Swing, JavaFX & SWT 3
K Höhe und Breite eines Panels im GridBagLayout ermitteln AWT, Swing, JavaFX & SWT 9
M Breite veraendern zwischen 2 JPanels AWT, Swing, JavaFX & SWT 2
D JLabel mit fester Breite und beliebiger Höhe AWT, Swing, JavaFX & SWT 4
L wie kann man die Höhe und Breite von JList festlegen AWT, Swing, JavaFX & SWT 3
M Finden des TOP - Containers AWT, Swing, JavaFX & SWT 8
philipp Ändern des Inhalts eines Containers nicht möglich AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben