如何将组件均匀放置在面板中?

时间:2017-05-11 12:54:32

标签: java swing java-2d

我必须显示点状状态查看器,这些点将显示在JPanel中。

我正在寻找一种方法,可以计算行数和列数,以充分利用面板中可用的空间。

未定义点数,但是一旦显示面板,点数将不会改变(点数在面板的构造函数中设置)。

点的边界框将是正方形。并且点的大小可能不会超过指定的大小(如20像素),但如果需要可能会缩小。

我不知道解释是否足够好。遗憾。

接近方形面板尺寸的示例:

enter image description here

如果水平拉伸:

enter image description here

如果垂直拉伸(到最大):

enter image description here

理想情况下,这些点可能缩小:

enter image description here

1 个答案:

答案 0 :(得分:0)

好的,所以它并不完美,但这就是我如何做到的:

在我的面板中,我添加了一个组件监听器:

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