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



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

我在Java swing工作,有一个JPanel与一个空布局管理器(即使用绝对定位)。JPanel在JFrame中填充一个空格,这样当JFrame调整大小时,它的大小就会改变。在这个JPanel中,我使用Component.setBounds()放置了许多其他组件。我希望将这些组件中的一个设置为相对于JPanel的底部,以便当包含JPanel调整大小时,较小的JComponent保持在容器的底部。

我试图通过覆盖getLocation()getBounds()方法来引用容器高度来做到这一点,但这两种方法似乎都不能像覆盖getPreferredSize()那样工作,即使在调用revalidate()repaint()之后。不幸的是,这里不能使用其他布局管理器,如BorderLayout。

有办法这样做吗?我错过了什么明显的东西吗?如果没有,是否有一种方法可以侦听容器高度的变化并重新调用.setBounds() ?

尝试监听面板的resize事件:

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位置。

相关内容

  • 没有找到相关文章

最新更新