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 JTextFields 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.

War es hilfreich?

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 wir GroupLayout.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:

  1. und die bereitgestellte min Wert nicht negativ ist, wird dieser Wert zurückgegeben wird.
  2. sonst, wenn es PREFERRED_SIZE ist, folgen wir die Regeln für die gewünschte Größe.
  3. sonst die Mindestgröße der Komponente zurückgegeben.

Wenn eine bevorzugte Größe ist erforderlich:

  1. und die bereitgestellte pref Wert nicht negativ ist, wird dieser Wert zurückgegeben wird.
  2. sonst, wenn es DEFAULT_SIZE oder PREFERRED_SIZE ist, kehrt die bevorzugte Größe der Komponente.

Wenn eine maximale Größe ist erforderlich:

  1. und die bereitgestellte max Wert nicht negativ ist, wird dieser Wert zurückgegeben wird.
  2. sonst, wenn es PREFERRED_SIZE ist, folgen wir die Regeln für die gewünschte Größe.
  3. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top