Я использую 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
s на одной строке, размеченной с GroupLayout
(одна последовательная группа горизонтально и одна параллельная группа вертикально). если я изменяю размер окна теперь, оба компонента получают свободное место (50% каждый). но я хочу только, чтобы первое текстовое поле росло/уменьшало горизонтально и только второе текстовое поле для росшего/уменьшения вертикально. какие значения минуты, приставки и макс. я должен использовать для выполнения этого? Я знаю, что могу просто попробовать его и видеть, какая комбинация работает, но я хотел бы знать обоснование позади этой проблемы.
Некоторое руководство можно найти в Как использовать GroupLayout: Component Size and Resizability. Что касается 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)...
Интересно, что постоянные значения отрицательны, поэтому их нельзя принять за фактические ограничения.