有三种不同类型的面板,每种面板跨越不同数量的网格。 1 * 3,1 * 1,3 * 1.
add(panel1, "span 1 3,push, grow");
add(panel2, "push, grow");
add(panel3, "span 3 1,push, grow");
我想将第一个面板的约束更改为“span 1 2”,当它与屏幕上的其他面板重叠时。但要弄清楚它是否与另一个小组重叠,我必须知道它的界限。
我没有设置任何大小限制。
有没有办法知道'实际显示面板/组件之前的界限'?
另外,如何知道MigLayout管理器设置的行和列的长度?
实际上我想用这些不同尺寸的面板覆盖整个屏幕。
编辑:
我忘了输入主要罪魁祸首... add(lastPanel, span, push, grow)
我试图用不同尺寸的面板覆盖整个屏幕。此代码适用于偶数个矩形,但不适用于奇数。当它们的数量为奇数时,则最后一个网格始终为空。所以我跨越最后一个面板来覆盖整个空的可用空间,但随后它与3 * 1面板重叠。
答案 0 :(得分:1)
我可以想到几种方式,不是很好或很漂亮,而且都受到同样的问题。
布局可以连续重复发生(也就是说你会被快速连续布局容器的许多请求所破坏)
陷阱试图弄清楚何时停止。当你造成它时,下一个问题是已知的。
您“可以”覆盖父Container
doLayout
方法,在您调用super.doLayout
后,您将可以访问生成的布局。这不是最佳解决方案,因为它要求您实施您可能不想要的Container
。
我能想到的另一个解决方案是使用ComponentListener
panel1
来监控componentResized
事件。
我会认真玩这些,看看你遇到了什么麻烦。更好的解决方案是提前尝试解决布局问题。
答案 1 :(得分:1)
JPanel
(默认情况下对每个Swing JComponents
有效)在两种情况下返回Size
或Bounds
如果在屏幕上一次显示
pack()
之后Top-Level Container
没有理由知道Standard LayoutManagers
的任何值,也不知道MigLayout,
答案 2 :(得分:1)
我又遇到了类似的问题,但这次我得到了答案,我可能对某人有帮助,所以我在这里发帖。
addAncestorListener(new AncestorListener() {
@Override
public void ancestorAdded(AncestorEvent event) {
height = getHeight();
width = getWidth();
//Modifications to the components here.
}
我想要在编译时由LayoutManager设置的尺寸(这是不可能的)。一旦组件布局在屏幕上,AncestorListener就会做到这一点。它捕获尺寸并相应地修改组件。