这可能是一个非常基本的问题,但是我在网上找不到任何关于它的信息。
我在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位置。