Como maximizar o efeito das colas Box? / Como priorizar os tamanhos preferidos dos componentes em detrimento de outros?

Configuração:

No lado direito da tela, há uma lista de cima para baixo.No lado esquerdo da tela, existem manipuladores para esta lista;um manipulador consiste em dois elementos, um ao lado do outro.a princípio, apenas um manipulador existe, mas outros podem aparecer;esses seriam então colocados um abaixo do outro.

Aqui, os elementos dos manipuladores são JComboBoxes:sourceAMask esourceBMask.

Para garantir que eles apareçam lado a lado, coloquei-os noBox mask_initialPair dispostos ao longo doBoxLayout.X_AXIS. Eles devem aparecer alinhados à esquerda, então eu preenchi a direita com umBox.createHorizontalGlue.

Permitirmask_initialPair para não ser esticado verticalmente, incluí que noBox maskPairs dispostos ao longo doBoxLayout.Y_AXIS e adicionou umBox.createVerticalGlue abaixo dele.

Para colocar esta lista vertical ao lado da outra,targetScroller, Incluí tanto noBox maskPage dispostos ao longo doBoxLayout.X_AXIS. Essa construção deve aparecer centralizada, então eu preenchi a esquerda e a direita comBox.createHorizontalGlue.

Minhas suposições (ideais):

sourceAMask esourceBMask alinhados à esquerda e de largura mínima necessária (conforme o maior comprimentosource[A|B]Package), pois a cola horizontal à direita ocupa todo o espaço adicional atribuído amaskPairs.mask_initialPair (e todos os pares adicionais) tem a altura mínima necessária (conforme o tamanho atual da fonte usada), pois a cola vertical abaixo ocupa todo o espaço adicional.As margens esquerda e direita demaskPage são de igual largura.maskPairs etargetScroller são de igual largura.

Apenas 3 são válidos.

4 é violado comomaskPairs é muito maior quetargetScroller, porque (violando 1), a cola horizontal dentromask_initialPair recebe largura igual às colas emmaskPage, como se inserido entremaskPairs etargetScroller, em vez de como parte demaskPairs.

2 é violado comomask_initialPair tem a mesma altura da cola abaixo dela.

Pergunta, questão:

Eu entendo como o desalinhamento horizontal acontece.Não entendo por que o alongamento (em ambas as dimensões) dos componentes visíveis ocorre, apesar de sempre haver cola para ocupar o excesso de espaço.

Em ambos os casos:Como posso corrigir isso?
Idealmente, sem substituir todas as classes e inflar meu código por seu tamanho novamente.

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);
  }
}

questionAnswers(0)

yourAnswerToTheQuestion