是否可以在MigLayout中指定深度?

时间:2013-02-08 18:54:16

标签: java swing user-interface miglayout

我正在使用MigLayout库进行Swing GUI。

我想覆盖两个JPanel,如下:

+----+-----------------------+
| 1  |         2             |
|    |                       |
+----+                       |
|                            |
|                            |
|                            |
|                            |
+----------------------------+

非常像视频游戏中的minimap


在我看来,有两种方法可以达到这个目的:

的JLayeredPane

JPanel main = new JPanel();
main.setBounds(0, 0, WIDTH, HEIGHT);
// ... fill it with Swing components ...
JPanel minimap = new JPanel();
minimap.setBounds(10, 10, 100, 100);
/// ... fill it with Swing components ...
JLayeredPane layer = new JLayeredPane();
layer.add(main, new Integer(0));
layer.add(minimap, new Integer(1));

然而,这种方法很脆弱,因为我必须指定WIDTHHEIGHT。如果调整窗口大小,那么我似乎必须再次计算这些值。

JLayeredPane& MigLayout

JPanel main = new JPanel();
// ... fill it with Swing components ...
JPanel minimap = new JPanel();
/// ... fill it with Swing components ...
JLayeredPane layer = new JLayeredPane();
layer.setLayoutManager(new MigLayout());

CC positioning;

positioning = // ??? something specified in percents and z-order?
layer.add(main, positioning, new Integer(0));

positioning = // ??? something specified in percents and z-order?
layer.add(minimap, positioning, new Integer(1));

是否可以使用MigLayout填充定位代码,同时让我指定百分比值(与第一个示例中的像素分辨率WIDTHHEIGHT相对)?

修改

以下是部分的解决方案:

positioning = new CC().width("100%").height("100%");
// ...
positioning = new CC().pos("10", "10");

然而,显示器抖动,有时是不可见的。我相信这与不确定的渲染顺序有关(虽然这只是直觉)。

1 个答案:

答案 0 :(得分:3)

  

我也尝试了setComponentZOrder,但这似乎没有任何影响

我不知道MigLayout如何在幕后工作,但我认为ZOrder很重要。

查看使用ZOrder布置组件的Overlap Layout,并对我对ZOrder的工作原理有一点了解。

如文中所述,也许 isOptimizedDrawingEnabled()方法在这种情况下也很重要,