在 Java Swing Null Layout 中,设置相对于容器底部的位置
In Java Swing Null Layout, set position relative to bottom of container
这可能是一个非常基本的问题,但我在网上找不到任何相关信息。
我在 Java swing 中工作,并且有一个带有空布局管理器(即使用绝对定位)的 JPanel。 JPanel 正在 JFrame 中填充 space,以便在调整 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 位置。
这可能是一个非常基本的问题,但我在网上找不到任何相关信息。
我在 Java swing 中工作,并且有一个带有空布局管理器(即使用绝对定位)的 JPanel。 JPanel 正在 JFrame 中填充 space,以便在调整 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 位置。