¿Cómo maximizar el efecto de las colas de caja? / ¿Cómo priorizar los tamaños preferidos de los componentes sobre otros?

Preparar:

En el lado derecho de la pantalla, hay una lista de arriba a abajo.En el lado izquierdo de la pantalla, hay manipuladores para esta lista;Un manipulador consta de dos elementos, uno al lado del otro.al principio solo existe un manipulador, pero pueden aparecer otros más;esos se colocarían uno debajo del otro.

Aquí, los elementos de los manipuladores son JComboBoxes:sourceAMask ysourceBMask.

Para asegurarme de que aparecen uno al lado del otro, los encerré en elBox mask_initialPair presentado a lo largo delBoxLayout.X_AXIS. Deben aparecer alineados a la izquierda, así que rellené la derecha con unBox.createHorizontalGlue.

Permitirmask_initialPair para estar verticalmente sin estirar, lo encerré en elBox maskPairs presentado a lo largo delBoxLayout.Y_AXIS y agregó unBox.createVerticalGlue Por debajo de eso.

Para poner esta lista vertical al lado de la otra,targetScroller, Encerré ambos en elBox maskPage presentado a lo largo delBoxLayout.X_AXIS. Esta construcción debería aparecer centrada, así que rellené tanto a la izquierda como a la derecha conBox.createHorizontalGlue.

Mis suposiciones (ideales):

sourceAMask ysourceBMask están alineados a la izquierda y tienen un ancho mínimo necesario (según la mayor longitud desdesource[A|B]Package), ya que el pegamento horizontal a la derecha ocupa todo el espacio adicional asignado amaskPairs.mask_initialPair (y todos los pares adicionales) tiene la altura mínima necesaria (según el tamaño actual de la fuente utilizada), ya que el pegamento vertical de abajo ocupa todo el espacio adicional.Los márgenes izquierdo y derecho demaskPage son de igual ancho.maskPairs ytargetScroller son de igual ancho.

Solo 3 bodegas.

4 se viola comomaskPairs es mucho más ancho quetargetScroller, porque (violando 1), el pegamento horizontal dentromask_initialPair recibe el mismo ancho que las colas enmaskPage, como si estuviera insertado entremaskPairs ytargetScroller, en lugar de como parte demaskPairs.

2 se viola comomask_initialPair tiene la misma altura que el pegamento debajo de él.

Pregunta:

Entiendo cómo ocurre la desalineación horizontal.No entiendo por qué ocurre el estiramiento (en ambas dimensiones) de los componentes visibles, a pesar de que siempre hay pegamento para ocupar el espacio en exceso.

En ambos casos:Cómo puedo arreglarlo?
Idealmente sin anular todas las clases e inflar mi código por su tamaño nuevamente.

import javax.swing.*;

class Test
{
  public static void main(String[] args)
  {
    String[] sourceAPackage = { "A::entry1", "A::entry2", "A::entry3" };
    String[] sourceBPackage = { "B::entry1", "B::entry2" };
    String[] targetPackage = {};

    JList<String> targetList = new JList<String>(targetPackage);
    JScrollPane targetScroller = new JScrollPane(targetList);

    JComboBox sourceAMask = new JComboBox<String>(sourceAPackage);
    JComboBox sourceBMask = new JComboBox<String>(sourceBPackage);
    sourceAMask.setEditable(true);
    sourceBMask.setEditable(true);

    Box mask_initialPair = new Box(BoxLayout.X_AXIS);
    mask_initialPair.add(sourceAMask);
    mask_initialPair.add(sourceBMask);
    mask_initialPair.add(Box.createHorizontalGlue());

    Box maskPairs = new Box(BoxLayout.Y_AXIS);
    maskPairs.add(mask_initialPair);
    maskPairs.add(Box.createVerticalGlue());

    Box maskPage = new Box(BoxLayout.X_AXIS);
    maskPage.add(Box.createHorizontalGlue());
    maskPage.add(maskPairs);
    maskPage.add(targetScroller);
    maskPage.add(Box.createHorizontalGlue());

    JFrame frame = new JFrame();
    frame.add(maskPage);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta