Größen von JPanels,JLable und JTextfield..

Status
Nicht offen für weitere Antworten.

HannsW

Bekanntes Mitglied
.. bestimmen.
wie kann man das machen?
Ich habe festgestellt, daß JPanel.getHeight() nicht sofort einen Wert <> 0 liefert; daher die Frage, ab wann diese Funktion "echte" Werte liefert.

Gleichfalls ein Problem für mich, bei gegebenem Font die Höhe/ Breite eines JTextefeldes zu erhalten. Wieviel Platz gibt Swing als Umrandung dazu? Und um Wieviel größer muss dann ein Panel sein, auf dem das Textfeld allein stehen soll?

Was ich erreichen möchte:
Ich berechne die absoluten Positionen und Größen meiner Label etc abhängig von den Fonts und vorgebenen Zeilen/Spalten.

Danach setze ich die Fenstergröße.
Nun möchte ich aber am unteren Rand ein Panel mit Buttons haben dessen linke untere Ecke der des ContentPane() entspricht.
Über diesem Panel soll ein JLabel mit oder ohne Panel als Statuszeile stehen.

Z.Zt. gebe ich die Panelgröße mit festen Werten an, möchte das aber ändern, und Bildschirmentsprechende Werte erhalten.

Danke für Hinweise
Hanns
 
G

Gast2

Gast
Anscheinden hast du das Prinzip nicht verstanden der Manager regelt doch alles das musst du nichts ABSOLUT platzieren...
 

HannsW

Bekanntes Mitglied
Anscheinden hast du das Prinzip nicht verstanden
wahrscheinlich nicht.
der Manager regelt doch alles das musst du nichts ABSOLUT platzieren...

wenn ich das aber nicht will ?

DIe einzige möglichkeit, die ich für mich sehe, wäre der GridBagManager. Aber wie schaffe ich es, daß in der 1. Reihe, 4 Spalte ein Textfeld über 3 Grids geht, während die darunterliegenden nur jeweils ein Grid belegen?

z.B.
##### kkkkkk jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
aaaaaa bbbbbb cccccc ddddddd ddddd
etc
Hanns
 

Marco13

Top Contributor
Hach, dazu wollte ich eigentlich auch mal einen FAQ-Eintrag schreiben. Oder gibt's den schon?

Statt [c]component.getHeight();[/c] kannst du mal [c]component.getPreferredSize().height[/c] ansehen - das ist auch dann schon gültig, wenn die Component noch nicht "realized" ist. Wenn's das nicht war, sag nochmal bescheid....
 

HannsW

Bekanntes Mitglied
Statt [c]component.getHeight();[/c] kannst du mal [c]component.getPreferredSize().height[/c] ansehen - das ist auch dann schon gültig, wenn die Component noch nicht "realized" ist. Wenn's das nicht war, sag nochmal bescheid....

"bescheid" :D

Das ist es eigentlich nicht, Laut Sun setzt der Entwickler die getPreferredSize(), sodaß der LM dann entsprechend rechnen kann. So verwende ich für mein contentPanel ( laut SUN)
Java:
	contentPanel = new JPanel() {
			public Dimension getPreferredSize() {
				return new Dimension(600, 400);
			}
		};
		contentPanel.setLayout(null);
		contentPanel.setPreferredSize(getPreferredSize());

Ich möchte wissen, wie die LM den "Sicherheitsabstand" z.B. zweier JLabel/JTextfield in der Höhe berechnen.
Bei einer Fonthöhe von 12 bekomme ich bei
[Java] statusZeile = new JLabel("testanzeige", JLabel.LEFT);
statusZeile.setFont(theLabelFont); // "Arial", Font.BOLD, 12
statusZeile.setBackground(Color.BLUE);
contentPanel.add(statusZeile);
statusHöhe = statusZeile.getFontMetrics(theLabelFont).getHeight();[/code]
eine Wert von 15. Addiere ich diese 15 zum y-Wert eines JLabels, um den y-Wert des zweiten zu erhalten, so sind die Texte dieser beiden Label direkt untereinandergeklatscht, daß man nichts lesen kann. Ergo gehört da ein Gap drumherum.

Bei Textfield käme dann noch die Dicke der Borderlinien dazu.
Um diese Werte geht es mir.

Ich habe meine Routine fertig, welche alle graphischen Elemente aus einer Datenbank liest, und egal bei welcher Auflösung entsprechend ihrer Zeilen- /Spalten-Angaben positioniert. Der "Supervisor" kann diese Positionen auf Anwenderwunsch ändern, und dann stimmts auch wieder.

Ich hab halt gedacht, mann könnte eine Gesetzmäßigkeit der Zwischenräume ( abstände ) von GUI-Elementen finden.
 

Marco13

Top Contributor
Hmjanaja ... man setzt die PreferredSize nur, wenn man das explizit will. Ansonsten wird der default verwendet (das würde dann ausführlicher in die FAQ kommen...) : getPreferredSize liefert standardmäßig die Größe, die die Component haben muss, um ihren Inhalt "schön" anzeigen zu können. Bei einem JLabel oder so hängt das u.a. vom Font und Textinhalt ab, aber auch von Border, Insets und Co. Bei zusammengesetzten Components (z.B. einem JPanel mit BorderLayout) wird die PreferredSize berechnet auf Basis von
- LayoutManager des JPanels
- PreferredSizes der enthaltenen Components

Man kann sich das etwa so vorstellen, dass er bei einem Aufruf von getPreferredSize() "rekursiv" den Component-Baum runterläuft und die PreferredSize ausrechnet, bis er an Components angekommen ist, die keine Untercomponenen mehr enthalten, oder bei denen die PreferredSize explizit gesetzt wurde.

Deswegen ist sowas
Java:
	contentPanel = new JPanel() {
			public Dimension getPreferredSize() {
				return new Dimension(600, 400);
			}
		};
		contentPanel.setLayout(null);
		contentPanel.setPreferredSize(getPreferredSize());
auch u.U. problematisch (und etwas... seltsam). Eigentlich sollte es da ein
[c]contentPanel.setPreferredSize(new Dimension(600, 400));[/c]
schon tun.


Addiere ich diese 15 zum y-Wert eines JLabels, um den y-Wert des zweiten zu erhalten, so sind die Texte dieser beiden Label direkt untereinandergeklatscht, daß man nichts lesen kann. Ergo gehört da ein Gap drumherum.

Das sind die Werte, die man u.a. mit [c]component.getInsets()[/c] bekommt - aber anzunehmen, dass die Höhe eines JLabels IMMER durch
fontHeight + insets.top + insets.bottom
ist ein bißchen heikel: Niemand garantiert einem, dass das so ist...
 

HannsW

Bekanntes Mitglied
Marco13;553208 [code=Java hat gesagt.:
contentPanel = new JPanel() {
public Dimension getPreferredSize() {
return new Dimension(600, 400);
}
};
[/code]
auch u.U. problematisch (und etwas... seltsam). Eigentlich sollte es da ein
[c]contentPanel.setPreferredSize(new Dimension(600, 400));[/c]
schon tun.
Hat mich auch gewundert; leider finde ich den Link zur Fundstelle nicht mehr.
Das sind die Werte, die man u.a. mit [c]component.getInsets()[/c] bekommt
hierauf bin ich mittlerweile auch gestoßen, und war schon ganz glücklich, bis..
- aber anzunehmen, dass die Höhe eines JLabels IMMER durch
fontHeight + insets.top + insets.bottom
ist ein bißchen heikel: Niemand garantiert einem, dass das so ist...

Und warum hat man da keine Garantie? ich denke, ein LM rechnet auch mit diesen Werten?

Ich würde nun eigentlich gern mit getInsets() weiter versuchen.
 

Marco13

Top Contributor
Und warum hat man da keine Garantie? ich denke, ein LM rechnet auch mit diesen Werten?

Jein. Speziell bei einem JLabel (aber ggf. auch bei anderen "nicht-zusammengesetzen" Components) wird der getPreferredSize()-Aufruf direkt an das UI weitergereicht - d.h. getPreferredSize() liefert bei einem Windows Look-And-Feel ggf. andere Werte, als bei einem Metal- oder Nimbus Look-And-Feel. Und woraus diese Werte berechnet werden, weiß man nicht. Du könntest dein eigenes Look-And-Feel schreiben, bei dem jedes JLabel einen hübschen, bunt geblümten 10 Pixel breiten Rand um den Text haben soll, der dann zwar bei getPreferredSize() mit eingerechnet werden würde, aber bei fontSize und insets nicht "explizit" auftauchen muss. (Wobei ich erwähnen muss, dass ich nicht weiß, ob es dort irgendwelche "Richtlinien" gibt, die in diesem Sinne genauer definieren, was bei Insets & Co zurückgeliefert werden muss)
 

HannsW

Bekanntes Mitglied
Du könntest dein eigenes Look-And-Feel schreiben, bei dem jedes JLabel einen hübschen, bunt geblümten 10 Pixel breiten Rand um den Text haben soll, der dann zwar bei getPreferredSize() mit eingerechnet werden würde, aber bei fontSize und insets nicht "explizit" auftauchen muss.

Naj, dann machte doch die oben schon mal angeführte "merkwürdige" Schreibweise
Java:
		contentPanel = new JPanel() {
			public Dimension getPreferredSize() {
				return new Dimension(600, 400);
			}
		};

nen Sinn?

Danke erst mal für die Hinweise, ich werde mich mal durchhangeln.
Hanns
 

Marco13

Top Contributor
Nee, bei einem JPanel wird die Größe auf Basis von Layout+ChildComponents berechnet, außer wenn sie explizit gesetzt wurde. Das Look & Feel spielt (soweit ich weiß) nur bei "nicht-zusammengesetzten" Components eine Rolle (ich bin mir da zwar ziemlich sicher, aber für 100% müßt' ich jetzt doch nochmal in den Quellcode schauen.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Feste Positionen und Größen in JavaFX AWT, Swing, JavaFX & SWT 1
C SWT group Elemete mit unterschiedlichen Größen angeben AWT, Swing, JavaFX & SWT 6
F FormLayout Größen Problem AWT, Swing, JavaFX & SWT 2
S SWT Table Größen verändern AWT, Swing, JavaFX & SWT 10
L Swing Größen-Problem mit JFrame AWT, Swing, JavaFX & SWT 2
J Textfelder in Applet übernehmen größen angabe nicht! AWT, Swing, JavaFX & SWT 4
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
CptK JPanels wechseln AWT, Swing, JavaFX & SWT 2
B Minimum x und y von Children-JPanels ermitteln AWT, Swing, JavaFX & SWT 3
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
S Liste von JPanels mit festen Höhen AWT, Swing, JavaFX & SWT 3
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
F Event Handling Kommunikation eines JButton ueber JPanels hinaus AWT, Swing, JavaFX & SWT 6
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
N Abspeichern eines kompletten JPanels AWT, Swing, JavaFX & SWT 57
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
W Swing JFrame mit unterschiedlichen JPanels AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C klassenübergreifende JPanels auf ein JFrame AWT, Swing, JavaFX & SWT 22
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
N Richtiges einstellen der size von JPanels AWT, Swing, JavaFX & SWT 10
D LayoutManager JPanels ohne LayoutManager platzieren AWT, Swing, JavaFX & SWT 6
Weltall 7 Swing JPanels werden doppelt gezeichnet AWT, Swing, JavaFX & SWT 6
C Swing JList mit JPanels AWT, Swing, JavaFX & SWT 6
J Swing JPanels werden ständig gezeichnet AWT, Swing, JavaFX & SWT 11
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
N Swing GUI updaten / Aufklappbare Jpanels AWT, Swing, JavaFX & SWT 2
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
J Swing Container innerhalb eines JPanels erfragen AWT, Swing, JavaFX & SWT 3
H Z-Order von JPanels in JFrames AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
R Verschachtelte JPanels FocusTraversalPolicy AWT, Swing, JavaFX & SWT 6
L mehere JPanels auf JFrame - setVisible() funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Swing JScrollPane fasst JPanel und Groesse des JPanels soll sich aendern AWT, Swing, JavaFX & SWT 2
H Layoutprobleme mit Jpanels AWT, Swing, JavaFX & SWT 2
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
R Swing JPanel enthält mehrere JPanels - Positionsvergabe AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
R MousePosition über mehrere JPanels darstellen AWT, Swing, JavaFX & SWT 13
A Mehrere JPanels in ein JFrame AWT, Swing, JavaFX & SWT 4
R JFrame enthält JScrollPane mit JPanels AWT, Swing, JavaFX & SWT 3
R Mehrere JPanels in JScrollPane AWT, Swing, JavaFX & SWT 3
R JScrollPane, mehrere JPanels hinzufügen AWT, Swing, JavaFX & SWT 2
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
M Automatische Anpassung eines JPanels in einem JFrame AWT, Swing, JavaFX & SWT 6
M Anpassen der Größe eines JPanels (incl. gezeichneter Ampel) AWT, Swing, JavaFX & SWT 2
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
G Alle Komponenten eines JPanels durchlaufen AWT, Swing, JavaFX & SWT 11
G MVC Modell mit JPanels? AWT, Swing, JavaFX & SWT 1
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
G mehrere JPanels untereinander ? AWT, Swing, JavaFX & SWT 2
M Wirkliche Größe eines JPanels/o.ä. ermitteln AWT, Swing, JavaFX & SWT 3
T Bisherige JFrames in JPanels oder JInternalFrames? AWT, Swing, JavaFX & SWT 2
M Minimieren von verschachtelten JPanels AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
G Größe eines JPanels beeinflussen AWT, Swing, JavaFX & SWT 5
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
S Frage: Mehrere JPanels gleichen Button zuzweisen? AWT, Swing, JavaFX & SWT 10
D JTree mit JPanels als UserObjects AWT, Swing, JavaFX & SWT 4
S Stapel aus transpareneten JPanels AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben