Я использую GroupLayout
для управления компонентами в некоторых динамически генерируемых формах ввода данных. Схема примерно такая:
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
Я использую 2 параллельные группы для горизонтальной компоновки и одну последовательную группу для вертикальной компоновки. По большей части все работает просто отлично.
Я хочу ограничить максимальную ширину меток (которые являются просто экземплярами JLabel
) до 1/3 ширины родительского JFrame
. Если бы JFrame
был фиксированного размера, это было бы тривиально, но мне приходится иметь дело с его изменением размера.
Я собираю события ComponentListener.componentResized()
из JFrame
, но я немного застрял в том, что делать, когда я получаю такое событие.
Я пробовал этот подход без везения:
public void componentResized(ComponentEvent e) {
int maxW = parentFrame.getWidth() / 3;
for (JLabel l : labels) {
l.setMaximumSize( // have also tried setSize() and setPreferredSize()
new Dimension(
Math.min(l.getSize().width, maxW),
l.getMaximumSize().height));
}
groupLayout.invalidateLayout(getContentSpace());
}
Кто-нибудь может предложить способ ограничения ширины ярлыков, который будет работать?
Вероятно, я мог бы каждый раз перестраивать макет с нуля, но я чувствую, что должен быть более простой способ.