0

共有三种不同类型的面板,每种面板跨越不同数量的网格。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 面板重叠。

4

3 回答 3

1

我可以想到几种方法,不是很好或不是很漂亮,而且都遇到同样的问题。

布局可以连续重复发生(也就是说,您将被一系列快速连续布局容器的请求所困扰)

陷阱试图弄清楚它什么时候停止。下一个问题在你引起它时就知道了。

您“可以”覆盖 parentContainerdoLayout方法,在您调用后,super.doLayout您将可以访问结果布局。这不是最好的解决方案,因为它要求您实施Container您可能不想实施的方案。

我能想到的另一个解决方案是使用ComponentListeneron panel1on 监视componentResized事件。

我会认真地玩这些,看看你给自己带来了什么麻烦。更好的解决方案是提前尝试解决布局问题。

于 2012-08-10T21:39:07.400 回答
1

JPanel(默认对 each 有效)在两种情况下Swing JComponents返回它的SizeorBounds

  1. if 是一次在屏幕上可见的时间

  2. 之后pack()Top-Level Container

没有理由知道Standard LayoutManagersMigLayout 和 MigLayout 的任何值,

于 2012-08-11T01:23:48.397 回答
1

我再次遇到了类似的问题,但这次我得到了答案,我可能对某人有帮助,所以我在这里发布。

addAncestorListener(new AncestorListener() {
        @Override
        public void ancestorAdded(AncestorEvent event) {
                height = getHeight();
                width = getWidth();
                //Modifications to the components here.
        }

我想要 LayoutManager 在编译时设置的尺寸(这是不可能的)。AncestorListener 做到了,一旦组件被布置在屏幕上。它捕获尺寸并相应地修改组件。

于 2012-08-20T08:52:11.577 回答