Как максимизировать эффект клеев Box? / Как расставить приоритеты предпочтительных размеров компонентов над другими?

Настроить:

На правой стороне экрана есть список сверху вниз.На левой стороне экрана есть манипуляторы для этого списка;один манипулятор состоит из двух элементов, один рядом с другим.сначала существует только один манипулятор, но могут появиться и другие;те были бы тогда помещены ниже друг друга.

Здесь элементы манипулятора - это JComboBoxes:sourceAMask а такжеsourceBMask.

Чтобы они появлялись рядом, я заключил их вBox mask_initialPair выложены вдольBoxLayout.X_AXIS, Они должны быть выровнены по левому краю, поэтому я добавил справаBox.createHorizontalGlue.

Позволятьmask_initialPair чтобы быть вертикально растянутым, я заключил, что вBox maskPairs выложены вдольBoxLayout.Y_AXIS и добавилBox.createVerticalGlue под этим.

Чтобы поместить этот вертикальный список рядом с другим,targetScrollerЯ вложил оба вBox maskPage выложены вдольBoxLayout.X_AXIS, Эта конструкция должна отображаться по центру, поэтому я добавляю слева и справаBox.createHorizontalGlue.

Мои (идеальные) предположения:

sourceAMask а такжеsourceBMask выровнены по левому краю и минимальной необходимой ширины (по наибольшей длине отsource[A|B]Package), поскольку горизонтальный клей справа занимает все пространство, назначенноеmaskPairs.mask_initialPair (и все последующие пары) имеет минимально необходимую высоту (в соответствии с текущим размером используемого шрифта), так как вертикальный клей ниже занимает все дальнейшее пространство.Левые и правые поляmaskPage имеют одинаковую ширину.maskPairs а такжеtargetScroller имеют одинаковую ширину.

Только 3 держит.

4 нарушается какmaskPairs гораздо шире, чемtargetScrollerпотому что (нарушая 1), горизонтальный клей внутриmask_initialPair получает равную ширину клея вmaskPageкак будто вставлено междуmaskPairs а такжеtargetScrollerа не как частьmaskPairs.

2 нарушается какmask_initialPair имеет равную высоту клея под ним.

Вопрос:

Я понимаю, как происходит горизонтальное смещение.Я не понимаю, почему происходит растяжение (в обоих измерениях) видимых компонентов, несмотря на то, что всегда есть клей, чтобы занять лишнее пространство.

В обоих случаях:Как я могу это исправить?
В идеале без переопределения всех классов и раздувания моего кода по размеру снова.

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

Ответы на вопрос(0)

Ваш ответ на вопрос