2009-03-09 1 views

Antwort

4

Obwohl ich dies nicht versucht habe, enthält die Container Klasse (die ein Vorfahre der JDesktopPane Klasse ist) eine getComponentZOrder Methode. Durch Übergeben einer Component, die in der Container ist, wird es die z-Reihenfolge von als int zurückgeben. Die Component mit dem niedrigsten von der Methode zurückgegebenen Z-Ordnungswert wird zuletzt gezeichnet, dh wird oben gezeichnet.

Kopplung mit der JDesktopPane.getAllFrames Methode, die ein Array von JInternalFrames zurückgibt, würde ich denken, dass man die Z-Reihenfolge der internen Frames erhalten könnte.

bearbeiten

Ich habe versucht, es tatsächlich und es scheint zu funktionieren:

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

Im obigen Beispiel wird ein JDesktopPane mit der dritte ein mit drei JInternalFrame s bevölkert mit Knopf, der eine Liste von JInternalFrame s und seine Z-Reihenfolge zu System.out ausgibt.

Ein Beispiel Ausgabe ist die folgende:

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 

Das Beispiel viele anonyme innere Klassen verwendet nur den Code kurz zu halten, sondern eine tatsächliche Programm sollte wahrscheinlich nicht tun.

Verwandte Themen