在Java Swing Null Layout中,设置相对于容器底部的位置

时间:2015-05-28 20:10:35

标签: java swing override layout-manager null-layout-manager

这可能是一个非常基本的问题,但我在网上找不到任何关于它的信息。

我正在使用Java swing并且使用带有null布局管理器的JPanel(即使用绝对定位)。 JPanel填充了JFrame中的空格,以便在调整JFrame大小时其大小会发生变化。在这个JPanel中,我使用Component.setBounds()放置了许多其他组件。我希望相对于JPanel的底部设置其中一个组件,这样当包含JPanel的大小调整时,较小的JComponent会停留在容器的底部。

我尝试通过覆盖getLocation()getBounds()方法来引用容器高度来尝试这样做,但是这些方法似乎都不会像覆盖getPreferredSize()一样工作,即使在调用之后也是如此revalidate()repaint()。不幸的是,使用像BorderLayout这样的另一个布局管理器不是一个选择。

有没有办法做这样的事情?我错过了一些明显的东西吗如果没有,是否有办法监听容器高度的变化并重新调用.setBounds()

2 个答案:

答案 0 :(得分:0)

尝试收听面板的resize事件:

panel.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent arg0) {
            component.setBounds(...);

        }
    });

您可以使用此方法引用panel.getBounds并相应地设置组件边界。

答案 1 :(得分:0)

为此,您可以向JFrame添加组件侦听器。

addComponentListener(new ComponentAdapter(){
    public void componentResized(ComponentEvent e){
        //Do stuff here
    }
});

在组件侦听器中,您可以更改任何内容的大小和位置。要将它们粘贴到底部,只需获取JFrame的大小并减去特定数量,并将其设置为您希望粘贴到底部的y位置。