这可能是一个非常基本的问题,但我在网上找不到任何关于它的信息。
我正在使用Java swing并且使用带有null布局管理器的JPanel(即使用绝对定位)。 JPanel填充了JFrame中的空格,以便在调整JFrame大小时其大小会发生变化。在这个JPanel中,我使用Component.setBounds()
放置了许多其他组件。我希望相对于JPanel的底部设置其中一个组件,这样当包含JPanel的大小调整时,较小的JComponent会停留在容器的底部。
我尝试通过覆盖getLocation()
或getBounds()
方法来引用容器高度来尝试这样做,但是这些方法似乎都不会像覆盖getPreferredSize()
一样工作,即使在调用之后也是如此revalidate()
和repaint()
。不幸的是,使用像BorderLayout这样的另一个布局管理器不是一个选择。
有没有办法做这样的事情?我错过了一些明显的东西吗如果没有,是否有办法监听容器高度的变化并重新调用.setBounds()
?
答案 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位置。