Вопрос

Я использую 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));

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

Это было полезно?

Решение

Некоторые рекомендации можно найти в Как использовать 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)...

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

Другие советы

Я также был смущен тем, как 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. в противном случае возвращается максимальный размер компонента.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top