如何使我的组件均匀地放置在面板中?
How can I make my components to be evenly placed in a panel?
我必须显示点状状态查看器,这些点将显示在 JPanel 中。
我正在寻找一种方法来计算行数和列数,以充分利用面板中可用的 space。
点数未定义,但一旦显示面板,点数将不会改变(点数在面板的构造函数中设置)。
点的边界框将为正方形。并且点的大小可能不会超过指定大小(例如 20 像素),但如果需要可能会缩小。
不知道解释的够不够。对不起。
接近正方形面板尺寸的示例:
如果水平拉伸:
如果垂直拉伸(最大):
理想情况下,点可以缩小:
好的,所以它并不完美,但我是这样做的:
在我的面板中,我添加了一个组件侦听器:
addComponentListener(new ChannelsStateViewerComponentListener());
然后在侦听器中我实现了 componentResized 方法:
public void componentResized(final ComponentEvent e)
{
final double ratio = (double)getWidth() / (double)getHeight();
layout.setRows((int) Math.sqrt(nbChannel / ratio));
layout.setColumns(0);
}
就是这样。感谢 Andrew 给我 sqrt 技巧。
我必须显示点状状态查看器,这些点将显示在 JPanel 中。
我正在寻找一种方法来计算行数和列数,以充分利用面板中可用的 space。
点数未定义,但一旦显示面板,点数将不会改变(点数在面板的构造函数中设置)。
点的边界框将为正方形。并且点的大小可能不会超过指定大小(例如 20 像素),但如果需要可能会缩小。
不知道解释的够不够。对不起。
接近正方形面板尺寸的示例:
如果水平拉伸:
如果垂直拉伸(最大):
理想情况下,点可以缩小:
好的,所以它并不完美,但我是这样做的:
在我的面板中,我添加了一个组件侦听器:
addComponentListener(new ChannelsStateViewerComponentListener());
然后在侦听器中我实现了 componentResized 方法:
public void componentResized(final ComponentEvent e)
{
final double ratio = (double)getWidth() / (double)getHeight();
layout.setRows((int) Math.sqrt(nbChannel / ratio));
layout.setColumns(0);
}
就是这样。感谢 Andrew 给我 sqrt 技巧。