Можно ли указать глубину в MigLayout?

Я использую библиотеку MigLayout для графического интерфейса Swing.

Я хотел бы наложить два JPanel так:

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

очень похоже на миникарту в видеоигре.


Мне кажется, есть два способа добиться этого:

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));

Однако этот подход ненадежен, потому что мне нужно указать WIDTH и HEIGHT. Если размер окна изменен, то кажется, что мне нужно снова вычислить эти значения.

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, позволяя мне указывать значения в процентах (в отличие от разрешения в пикселях WIDTH и HEIGHT в первом примере)?

ИЗМЕНИТЬ:

Вот решение, которое частично работает:

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

Однако дисплей дрожит и иногда его не видно. Я считаю, что это связано с неопределенным порядком рендеринга (хотя это просто интуиция).


person sdasdadas    schedule 08.02.2013    source источник
comment
Я также пробовал setComponentZOrder, но это, похоже, не имеет никакого эффекта.   -  person sdasdadas    schedule 08.02.2013


Ответы (1)


Я также пробовал setComponentZOrder, но это, похоже, не имеет никакого эффекта.

Я не знаю, как MigLayout работает за кулисами, но я думаю, что ZOrder важен.

Ознакомьтесь с макетом с перекрытием, который использует ZOrder для компоновки компонентов и имеет небольшой рекламный ролик о моем понимании того, как работает ZOrder.

Возможно, метод isOptimizedDrawingEnabled(), упомянутый в статье, также важен в этом случае,

person camickr    schedule 08.02.2013
comment
Роберт Д. Камик, ты решил мою проблему! Мне пришлось переопределить isOptmizedDrawingEnabled, чтобы он возвращал false, и сначала добавить миникарту. - person sdasdadas; 09.02.2013