В чем разница между DEFAULT_SIZE и PREFERRED_SIZE? - PullRequest
6 голосов
/ 02 апреля 2010

Я использую Swing GroupLayout, и меня смущают значения GroupLayout.DEFAULT_SIZE и GroupLayout.PREFERRED_SIZE. Я никогда не знаю, когда использовать каждый из них в таких методах, как GroupLayout.addComponent(Component, int, int, int).

предположим, у меня есть этот код:

GroupLayout l = ...;

l.setHorizontalGroup(l.createSequentialGroup()
    .addComponent(tf1)
    .addComponent(tf2));

l.setVerticalGroup(l.createParallelGroup()
    .addComponent(tf1)
    .addComponent(tf2));

имеется две JTextField с на одной строке, обозначенной GroupLayout (одна последовательная группа по горизонтали и одна параллельная группа по вертикали). если я изменю размер окна сейчас, оба компонента получат доступное пространство (по 50% каждый). но я хочу, чтобы только первое текстовое поле увеличивалось / уменьшалось по горизонтали, и только второе текстовое поле увеличивалось / уменьшалось по вертикали. какие значения min , pref и max мне следует использовать для достижения этой цели? Я знаю, что могу просто попробовать и посмотреть, какая комбинация работает, но я бы хотел узнать причины этой проблемы.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2010

Некоторые рекомендации можно найти в Как использовать GroupLayout: размер компонента и изменяемый размер . Относительно DEFAULT_SIZE и PREFERRED_SIZE,

Их можно использовать в качестве параметров в методе

 addComponent(Component comp, int min, int pref, int max)

Чтобы изменить размер компонента (разрешить сжатие и рост):

 group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

Это позволяет компоненту изменять размер от нулевого размера (минимального) до любого размера (Short.MAX_VALUE, поскольку максимальный размер означает «бесконечный»). Если бы мы хотели, чтобы компонент не уменьшался ниже своего минимального размера по умолчанию, мы бы использовали GroupLayout.DEFAULT_SIZE вместо 0 во втором параметре.

Чтобы сделать компонент фиксированного размера (подавить изменение размера):

 group.addComponent(component, GroupLayout.PREFERRED_SIZE,
     GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...

Интересно, что значения констант являются отрицательными, поэтому их нельзя принять за действительные ограничения.

1 голос
/ 14 января 2012

Я также был озадачен тем, как GroupLayout.DEFAULT_SIZE и GroupLayout.PREFERRED_SIZE используются в GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max), даже после ссылки на раздел GroupLayout Учебников по Java и статью java.net под названием Знакомство с GroupLayout, часть 1 .

Погружение в JDK 1.6.0_27 GroupLayout.javasource Я нашел ответы в классе ComponentSpring. Из этого я смог выработать следующие правила:

Если необходим минимальный размер:

  1. и предоставленное значение min является неотрицательным, это значение возвращается.
  2. иначе, если это PREFERRED_SIZE, мы следуем правилам для предпочтительного размера.
  3. иначе возвращается минимальный размер компонента.

Если необходим предпочтительный размер:

  1. и предоставленное значение pref является неотрицательным, это значение возвращается.
  2. иначе, если это DEFAULT_SIZE или PREFERRED_SIZE, вернуть предпочтительный размер компонента.

Если требуется максимальный размер:

  1. и предоставленное значение max является неотрицательным, это значение возвращается.
  2. иначе, если это PREFERRED_SIZE, мы следуем правилам для предпочтительного размера.
  3. иначе возвращается максимальный размер компонента.

Как уже отмечал trashgod, определения являются отрицательными. Любое другое отрицательное значение для min, pref и max, кроме DEFAULT_SIZE или PREFERRED_SIZE, является ошибкой и подтверждением нажатия.

Взаимодействие между SequentialGroup.addComponent min, pref и max размерами не было сразу видно из урока. Теперь я знаю, почему PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE исправлено, почему не имеет значения, является ли средний аргумент DEFAULT_SIZE или PREFERRED_SIZE и как NetBeans генерирует значения фиксированного размера, такие как DEFAULT_SIZE,300,Short.MAX_VALUE.

...