Was ist der Unterschied zwischen DEFAULT_SIZE und PREFERRED_SIZE?
-
23-09-2019 - |
Frage
Ich bin mit Swing-Grouplayout und ich bin verwirrt über die Werte GroupLayout.DEFAULT_SIZE
und GroupLayout.PREFERRED_SIZE
. Ich weiß nie, wenn jeder von ihnen in Methoden wie GroupLayout.addComponent(Component, int, int, int)
zu verwenden.
Angenommen, ich habe diesen Code:
GroupLayout l = ...;
l.setHorizontalGroup(l.createSequentialGroup()
.addComponent(tf1)
.addComponent(tf2));
l.setVerticalGroup(l.createParallelGroup()
.addComponent(tf1)
.addComponent(tf2));
gibt es zwei JTextField
s auf einer einzigen Zeile mit GroupLayout
angelegt (eine sequentielle Gruppe horizontal und eine parallele Gruppe vertikal). wenn ich das Fenster jetzt die Größe, erhalten beide Komponenten den verfügbaren Speicherplatz (je 50%). aber ich möchte nur das erste Textfeld horizontal wachsen / schrumpfen und erst das zweite Textfeld vertikal zu wachsen / schrumpfen. welche Werte von min pref und max soll ich das erreichen verwenden? Ich weiß, ich kann es nur versuchen und sehen, was funktioniert Kombination, aber ich mag die Gründe für dieses Problem kennen.
Lösung
Einige Leitlinien können in zu finden Wie Verwenden Grouplayout: Komponente Größe und Resizability . In Bezug auf DEFAULT_SIZE
und PREFERRED_SIZE
,
Sie können als Parameter in dem Verfahren verwendet werden
addComponent(Component comp, int min, int pref, int max)
Um eine Komponente zu zwingen resizable zu sein (damit schrumpfende und wachsende):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
Auf diese Weise kann die Komponente zwischen Null Größe (Minimum) für jede Größe (
Short.MAX_VALUE
als maximale Größe bedeutet „unendlich“) ändern. Wenn wir die Komponente nicht schrumpft unter der Standardmindestgröße wollten wirGroupLayout.DEFAULT_SIZE
statt 0 im zweiten Parameter verwenden würden.Um eine Komponente mit fester Größe (Unterdrückungs Resizing) zu machen:
group.addComponent(component, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...
Interessanterweise sind die konstanten Werte negativ sind, so dass sie nicht für die tatsächliche Beschränkungen verwechselt werden können.
Andere Tipps
Ich war auch verwirrt darüber, wie GroupLayout.DEFAULT_SIZE
und GroupLayout.PREFERRED_SIZE
in GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)
verwendet, auch nach dem Grouplayout Abschnitt des Java Tutorials Referenzierung und java.net Artikel mit dem Titel Erste wissen, Grouplayout, Teil 1 .
Tauchen in das JDK 1.6.0_27 GroupLayout.javasource Ich fand die Antworten in der ComponentSpring Klasse. Von dass ich in der Lage war, diese Regeln zu erarbeiten:
Wenn eine Mindestgröße erforderlich:
- und die bereitgestellte
min
Wert nicht negativ ist, wird dieser Wert zurückgegeben wird. - sonst, wenn es
PREFERRED_SIZE
ist, folgen wir die Regeln für die gewünschte Größe. - sonst die Mindestgröße der Komponente zurückgegeben.
Wenn eine bevorzugte Größe ist erforderlich:
- und die bereitgestellte
pref
Wert nicht negativ ist, wird dieser Wert zurückgegeben wird. - sonst, wenn es
DEFAULT_SIZE
oderPREFERRED_SIZE
ist, kehrt die bevorzugte Größe der Komponente.
Wenn eine maximale Größe ist erforderlich:
- und die bereitgestellte
max
Wert nicht negativ ist, wird dieser Wert zurückgegeben wird. - sonst, wenn es
PREFERRED_SIZE
ist, folgen wir die Regeln für die gewünschte Größe. - sonst das Maximum der Komponente zurückgegeben.
Wie trashgod bereits erwähnt, sind die definiert negativ. Jeder anderer negativer Wert für min, pref und max neben DEFAULT_SIZE
oder PREFERRED_SIZE
sind Fehler und Erfolg behauptet.
Das Zusammenspiel zwischen den SequentialGroup.addComponent
min, pref und max Größen war nicht sofort ersichtlich ich aus dem Tutorial. Jetzt weiß ich, warum PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE
fixiert ist, warum es keine Rolle, ob das mittlere Argument DEFAULT_SIZE
oder PREFERRED_SIZE
und wie die NetBeans erzeugen feste Größe Werte wie DEFAULT_SIZE,300,Short.MAX_VALUE
Arbeit.