qual è la differenza tra DEFAULT_SIZE e PREFERRED_SIZE?
-
23-09-2019 - |
Domanda
Sto usando swing GroupLayout e sono confuso circa i valori GroupLayout.DEFAULT_SIZE
e GroupLayout.PREFERRED_SIZE
. Non so mai quando utilizzare ciascuna di esse in metodi come GroupLayout.addComponent(Component, int, int, int)
.
supponiamo di avere 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 ridimensiona la finestra ora, entrambi i componenti ottenere lo spazio disponibile (50% ciascuno). ma voglio solo il primo campo di testo a crescere / ridurre in senso orizzontale e solo il secondo campo di testo a crescere / ridursi verticalmente. quali valori di min , pref e max dovrei usare per realizzare questo? So che posso solo provare e vedere quale combinazione opere, ma mi piacerebbe sapere il ragionamento alla base di questo problema.
Soluzione
Alcune indicazioni possono essere trovati in Come Uso GroupLayout: Componente Dimensioni e Resizability . Per quanto riguarda 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 di essere ridimensionabile (consentire restringimento e crescente):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
Questo consente al componente di ridimensionare tra zero dimensioni (minimo) a qualsiasi dimensione (
Short.MAX_VALUE
come mezzo di dimensione massima "infinite"). Se volevamo il componente non ritirerà oltre la sua dimensione minima predefinita, useremoGroupLayout.DEFAULT_SIZE
invece di 0 nel secondo parametro.Per effettuare una dimensione fissa componente (ridimensionamento sopprimere):
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.
Altri suggerimenti
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 del Java tutorial e un articolo intitolato java.net conoscere GroupLayout, parte 1 .
Un tuffo nel 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:
- e il valore fornito è
min
non negativo, tale valore viene restituito. - altra cosa se è
PREFERRED_SIZE
, seguiamo le regole per dimensione preferita. - altra dimensione minima del componente viene restituito.
Se è necessaria una dimensione preferita:
- e il valore fornito è
pref
non negativo, tale valore viene restituito. - altra cosa se è
DEFAULT_SIZE
oPREFERRED_SIZE
, restituire dimensione preferita del componente.
Se è necessaria una dimensione massima:
- e il valore fornito è
max
non negativo, tale valore viene restituito. - altra cosa se è
PREFERRED_SIZE
, seguiamo le regole per dimensione preferita. - altro MaximumSize del componente viene restituito.
Come trashgod già osservato, le definisce sono negativi. Qualsiasi altro valore negativo per min, pref e max oltre DEFAULT_SIZE
o PREFERRED_SIZE
sono gli errori e colpo afferma.
L'interazione tra i SequentialGroup.addComponent
min, pref, e dimensioni max non era immediatamente evidente per me dal tutorial. Ora so perché PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE
è fisso, perché non importa se l'argomento centrale è DEFAULT_SIZE
o PREFERRED_SIZE
e come le NetBeans generati valori delle dimensioni fisse come il lavoro DEFAULT_SIZE,300,Short.MAX_VALUE
.