В 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 для того, что вы хотите, прикрепленного к нижней части.

Другие вопросы по тегам