Я использую 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());
}
Может кто-нибудь предложить способ ограничения шириныметки, которые будут работать?
Я мог бы каждый раз перестраивать макет с нуля, но я чувствую, что должен быть более простой способ.