2010-04-01 8 views
6

Sto utilizzando Swing GroupLayout e sono confuso circa i valori GroupLayout.DEFAULT_SIZE e GroupLayout.PREFERRED_SIZE. Non so mai quando utilizzare ognuno di essi in metodi come GroupLayout.addComponent(Component, int, int, int).qual è la differenza tra DEFAULT_SIZE e PREFERRED_SIZE?

supporti ho questo codice:

GroupLayout l = ...; 

l.setHorizontalGroup(l.createSequentialGroup() 
    .addComponent(tf1) 
    .addComponent(tf2)); 

l.setVerticalGroup(l.createParallelGroup() 
    .addComponent(tf1) 
    .addComponent(tf2)); 

ci sono due JTextField s su una singola linea disposte con GroupLayout (un gruppo sequenziale orizzontalmente e un gruppo parallelo verticalmente). se adesso ridimensiono la finestra, entrambi i componenti ottengono lo spazio disponibile (50% ciascuno). ma voglio solo che il primo campo di testo si accresci o si restringa orizzontalmente e solo il secondo campo di testo si accresci/si restringa verticalmente. quali valori di min, pref e max devo usare per realizzare quello? So che posso provare e vedere quale combinazione funziona, ma mi piacerebbe conoscere il ragionamento che sta dietro a questo problema.

+0

Fondamentalmente GroupLayout è progettato per essere utilizzato negli editor dell'interfaccia utente WYSIWYG (come in Netbeans). Chiedete od di curiosità o la usate "a mano"? – pajton

+1

entrambi :-) Uso l'editor WYSIWYG da NetBeans ma mi piace capire il codice in modo da poter implementare alcuni semplici casi 'a mano'. Ho più controllo del codice quando lo faccio da solo. – cd1

risposta

3

Alcune indicazioni sono disponibili in How to Use GroupLayout: Component Size and Resizability. Riguardo DEFAULT_SIZE e PREFERRED_SIZE,

Possono essere utilizzati come parametri nel metodo

addComponent(Component comp, int min, int pref, int max) 

Per forzare un componente da dimensionabile (consentire contrazione e crescente):

group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 

Ciò consente al componente di ridimensionare tra zero (minimo) e qualsiasi dimensione (Short.MAX_VALUE come dimensione massima significa "infinito"). Se volessimo che il componente non si riduca al di sotto della sua dimensione minima predefinita, useremmo GroupLayout.DEFAULT_SIZE invece di 0 nel secondo parametro.

Per effettuare una dimensione fissa componente (sopprimere ridimensionamento):

group.addComponent(component, GroupLayout.PREFERRED_SIZE, 
    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)... 

interessante notare, i valori costanti sono negativi, in modo che non può essere scambiato per vincoli reali.

1

Sono stato anche confuso su come GroupLayout.DEFAULT_SIZE e GroupLayout.PREFERRED_SIZE sono utilizzati in GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max), anche dopo riferimento alla sezione GroupLayout dei tutorial Java e un articolo intitolato java.net Getting to know GroupLayout, part 1.

Immergersi in JDK 1.6.0_27 GroupLayout.javasource Ho trovato le risposte nella classe ComponentSpring. Da che ero in grado di elaborare queste regole:

Se è necessaria una dimensione minima:

  1. ed il min valore fornito è non negativo, che valore viene restituito.
  2. else se è PREFERRED_SIZE, seguiamo le regole per le dimensioni preferite.
  3. else viene restituita la dimensione minima del componente.

Se è necessaria una dimensione preferita:

  1. e il pref valore fornito è non negativo, tale valore viene restituito.
  2. else se è DEFAULT_SIZE o PREFERRED_SIZE, restituire la dimensione preferita del componente.

Se è necessaria una dimensione massima:

  1. e il max valore fornito è non negativo, tale valore viene restituito.
  2. else se è PREFERRED_SIZE, seguiamo le regole per le dimensioni preferite.
  3. else viene restituito il valore massimo del componente.

Come già sottolineato da trashgod, i valori sono negativi. Qualsiasi altro valore negativo per min, pref e max oltre a DEFAULT_SIZE o PREFERRED_SIZE sono errori e affermazioni di successo.

L'interazione tra SequentialGroup.addComponent min, pref e dimensioni massime non mi è stata immediatamente rilevata dal tutorial. Ora so perché è stato corretto il PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE, perché non importa se l'argomento medio è DEFAULT_SIZE o PREFERRED_SIZE e come funzionano i valori di dimensione fissa di NetBeans come DEFAULT_SIZE,300,Short.MAX_VALUE.