¿cuál es la diferencia entre DEFAULT_SIZE y PREFERRED_SIZE?
-
23-09-2019 - |
Pregunta
Estoy usando GroupLayout Swing y estoy confundido acerca de los valores y GroupLayout.DEFAULT_SIZE
GroupLayout.PREFERRED_SIZE
. Nunca sé cuándo utilizar cada uno de ellos en métodos como GroupLayout.addComponent(Component, int, int, int)
.
supongamos que tengo este código:
GroupLayout l = ...;
l.setHorizontalGroup(l.createSequentialGroup()
.addComponent(tf1)
.addComponent(tf2));
l.setVerticalGroup(l.createParallelGroup()
.addComponent(tf1)
.addComponent(tf2));
hay dos JTextField
s en una sola línea distribuida con GroupLayout
(un grupo secuencial horizontalmente y un grupo paralelo verticalmente). Si cambio el tamaño de la ventana ahora, ambos componentes consiguen el espacio disponible (50% cada uno). pero quiero sólo el primer campo de texto para crecer / estirar horizontalmente y sólo el segundo campo de texto para crecer / contraerse verticalmente. cuáles son los valores de min , pref y max debería usar para lograr eso? Sé que solo puedo probarlo y ver lo que funciona combinación pero me gustaría saber el razonamiento detrás de este problema.
Solución
Algunas guía se puede encontrar en ¿Cómo uso GroupLayout: tamaño de los componentes y Resizability . En cuanto a DEFAULT_SIZE
y PREFERRED_SIZE
,
Se pueden utilizar como parámetros en el método
addComponent(Component comp, int min, int pref, int max)
Para forzar un componente a ser de tamaño variable (permitir la contracción y creciente):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
Esto permite que el componente para cambiar el tamaño entre cero tamaño (mínimo) a cualquier tamaño (
Short.MAX_VALUE
como medios tamaño máximo "infinitos"). Si queremos que el componente no retroceder por debajo de su mínimo predeterminado, usaríamosGroupLayout.DEFAULT_SIZE
en lugar de 0 en el segundo parámetro.Para hacer un tamaño fijo componente (cambio de tamaño suprimir):
group.addComponent(component, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...
Curiosamente, los valores constantes son negativos, por lo que no puede ser confundido con las limitaciones reales.
Otros consejos
I también fue confundido acerca de cómo GroupLayout.DEFAULT_SIZE
y GroupLayout.PREFERRED_SIZE
se utilizan en GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)
, incluso después de hacer referencia a la sección GroupLayout de la Java tutoriales y un artículo titulado java.net conocer GroupLayout, parte 1 .
El zambullirse en el JDK 1.6.0_27 GroupLayout.javasource he encontrado las respuestas en la clase ComponentSpring. Desde que yo era capaz de trabajar a cabo las siguientes reglas:
Si es necesario un mínimo:
- y el valor
min
proporcionada es no negativo, se devuelve dicho valor. - otra cosa si es
PREFERRED_SIZE
, seguimos las reglas para el tamaño preferido. - otra cosa se devuelve el tamaño mínimo del componente.
Si se necesita un tamaño preferido:
- y el valor
pref
proporcionada es no negativo, se devuelve dicho valor. - otra cosa si es
DEFAULT_SIZE
oPREFERRED_SIZE
, regresar el tamaño preferido del componente.
Si se necesita un tamaño máximo:
- y el valor
max
proporcionada es no negativo, se devuelve dicho valor. - otra cosa si es
PREFERRED_SIZE
, seguimos las reglas para el tamaño preferido. - otra cosa se devuelve MaximumSize del componente.
Como trashgod ya se señaló, los define son negativos. Cualquier otro valor negativo para min, pref y máximo además DEFAULT_SIZE
o PREFERRED_SIZE
son errores y afirma golpe.
La interacción entre los SequentialGroup.addComponent
min, pref y tamaños Max no fue inmediatamente evidente a mí desde el tutorial. Ahora sé por qué PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE
es fijo, por lo que no importa si el argumento central es DEFAULT_SIZE
o PREFERRED_SIZE
y cómo el NetBeans generan valores de tamaño fijo, como el trabajo DEFAULT_SIZE,300,Short.MAX_VALUE
.