2013-02-08 1 views
1

J'utilise la bibliothèque MigLayout pour une interface graphique Swing.Est-il possible de spécifier la profondeur dans MigLayout?

Je voudrais superposer deux JPanel, comme si:

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

beaucoup comme un minimap dans un jeu vidéo.


Il me semble qu'il ya deux façons d'y parvenir:

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

Cette approche, cependant, est fragile parce que je dois préciser WIDTH et HEIGHT. Si la fenêtre est redimensionnée, il semble que je doive à nouveau calculer ces valeurs.

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

Est-il possible de remplir le code de positionnement avec quelque chose qui permet des superpositions en utilisant MigLayout tout en me permettant de spécifier des valeurs en pourcentage (par opposition à la résolution de pixels WIDTH et HEIGHT dans le premier exemple)?

EDIT:

Voici une solution qui partiellement œuvres:

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

Cependant, la frousse d'affichage et est parfois invisible. Je crois que cela a à voir avec un ordre de rendu indéterminé (bien que ce soit juste une intuition).

+0

J'ai aussi essayé setComponentZOrder, mais cela ne semble pas avoir d'effet. – sdasdadas

Répondre

3

J'ai aussi essayé setComponentZOrder, mais cela ne semble pas avoir d'effet

Je ne sais pas comment MigLayout travaille dans les coulisses, mais je pense ZOrder est important.

Jetez un coup d'œil à la Overlap Layout qui utilise ZOrder pour la mise en page des composants et a un petit texte sur ma compréhension du fonctionnement de ZOrder.

Peut-être le isOptimizedDrawingEnabled() méthode, comme mentionné dans l'article, est aussi important est ce cas,

+1

Robert D. Camick, vous avez résolu mon problème! J'ai dû remplacer isOptmizedDrawingEnabled pour retourner false et ajouter la minicarte en premier. – sdasdadas

Questions connexes