我必须显示点状状态查看器,这些点将显示在JPanel中。
我正在寻找一种方法,可以计算行数和列数,以充分利用面板中可用的空间。
未定义点数,但是一旦显示面板,点数将不会改变(点数在面板的构造函数中设置)。
点的边界框将是正方形。并且点的大小可能不会超过指定的大小(如20像素),但如果需要可能会缩小。
我不知道解释是否足够好。遗憾。
接近方形面板尺寸的示例:
如果水平拉伸:
如果垂直拉伸(到最大):
理想情况下,这些点可能缩小:
答案 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技巧。