2009-03-09 4 views

Répondre

4

Bien que je n'ai pas essayé cela, la classe Container (qui est un ancêtre de la classe JDesktopPane) contient une méthode getComponentZOrder. En passant un Component qui est dans le Container, il renverra l'ordre z de int. Le Component avec la valeur de z-order la plus basse retournée par la méthode est dessinée en dernier, en d'autres termes, est dessinée en haut.

Couplage avec la méthode JDesktopPane.getAllFrames, qui renvoie un tableau de JInternalFrames, je pense que l'on pourrait obtenir l'ordre z des cadres internes.

Modifier

Je l'ai fait l'ai essayé et il semble fonctionner:

final JFrame f = new JFrame(); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

final JDesktopPane desktopPane = new JDesktopPane(); 
desktopPane.add(new JInternalFrame("1") { 
    { 
     setVisible(true); 
     setSize(100, 100); 
    } 
}); 
desktopPane.add(new JInternalFrame("2") { 
    { 
     setVisible(true); 
     setSize(100, 100); 
    } 
}); 
desktopPane.add(new JInternalFrame("3") { 
    JButton b = new JButton("Get z-order"); 
    { 
     setVisible(true); 
     setSize(100, 100); 
     getContentPane().add(b); 
     b.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) 
      { 
       JInternalFrame[] iframes = desktopPane.getAllFrames(); 
       for (JInternalFrame iframe : iframes) 
       { 
        System.out.println(iframe + "\t" + 
          desktopPane.getComponentZOrder(iframe)); 
       } 
      } 
     }); 
    } 
}); 

f.setContentPane(desktopPane); 
f.setLocation(100, 100); 
f.setSize(400, 400); 
f.validate(); 
f.setVisible(true); 

Dans l'exemple ci-dessus, un JDesktopPane est peuplé de trois JInternalFrame s avec le troisième ayant une bouton qui affichera une liste de JInternalFrame s et sa commande z à System.out.

Un exemple de sortie est la suivante:

JDesktopPaneTest$3[... tons of info on the frame ...] 0 
JDesktopPaneTest$2[... tons of info on the frame ...] 1 
JDesktopPaneTest$1[... tons of info on the frame ...] 2 

L'exemple utilise beaucoup de classes internes anonymes juste pour garder le code court, mais un programme réel probablement ne devrait pas le faire.

Questions connexes