В Java Swing Null Layout установите положение относительно дна контейнера
Вероятно, это очень простой вопрос, но я не смог ничего найти об этом в Интернете.
Я работаю в Java Swing и у меня есть JPanel с нулевым менеджером макетов (то есть с использованием абсолютного позиционирования). JPanel заполняет пространство в JFrame, так что его размер будет изменяться при изменении размера JFrame. В этой JPanel у меня есть ряд других компонентов, которые я поместил, используя Component.setBounds()
, Мне бы хотелось, чтобы один из этих компонентов был установлен относительно нижней части JPanel, чтобы при изменении размера содержащейся JPanel меньший JComponent оставался прилипшим к нижней части контейнера.
Я попытался сделать это, переопределив getLocation()
или же getBounds()
методы для ссылки на высоту контейнера, но ни один из них, казалось, не работал так, как переопределение getPreferredSize()
даже после звонка revalidate()
а также repaint()
, К сожалению, использование другого менеджера компоновки, такого как BorderLayout, здесь не вариант.
Есть ли способ сделать что-то подобное? Я что-то упускаю из виду? Если нет, есть ли способ прослушать изменения высоты контейнера и перезвонить .setBounds()
?
2 ответа
Попробуйте прослушать событие изменения размера панели:
panel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent arg0) {
component.setBounds(...);
}
});
Вы можете ссылаться panel.getBounds
от использования этого метода и установить границы компонентов соответственно.
Для этого вы можете добавить компонентный слушатель к вашему JFrame.
addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e){
//Do stuff here
}
});
Внутри слушателя компонента вы можете изменить размеры и расположение чего угодно. Чтобы прикрепить их к нижней части, просто получите размер JFrame, вычтите определенное количество и установите его в качестве местоположения y для того, что вы хотите, прикрепленного к нижней части.