如何使我的组件均匀地放置在面板中?

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 技巧。