Я использую GroupLayout
для управления компонентами в некоторых динамически создаваемых формах ввода данных. Макет более или менее похож на:
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
Я использую две параллельные группы для горизонтальной компоновки и одну последовательную группу для вертикальной компоновки. По большей части все работает нормально.
Я хочу ограничить максимальную ширину меток (которые являются только экземплярами 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());
}
Может ли кто-нибудь предложить способ ограничить ширину меток, которые будут работать?
Я мог бы, вероятно, перестроить макет с нуля каждый раз, но я чувствую, что должен быть более простой способ.