colocar varios JInternalFrame

jmolpe
07 de Julio del 2006
Quisiera saber como puedo hacer para que al crear varios JInternalFrame sobre el mismo JDesktopPanel, el ultimo JInternalFrame que se cree aparezca por encima de los ya creados.

Gracias

lepard
07 de Julio del 2006
Este código es un ejemplo de como funciona los métodos clave son los
toFront() que es de de la clase JInternalFrame
y el jdp.setSelectedFrame(): que es un método de del JDesktopPane para indicarque internal frame es el seleccionado.

De todas formas mirate los javadocs, la ayuda de java.



import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import javax.print.attribute.standard.Destination;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.*;
public class WW extends JFrame{
private JDesktopPane jdp;
private JInternalFrame ji1;
private JInternalFrame ji2;
private JInternalFrame ji3;
private JInternalFrame ji4;
private JButton b1;
private JButton b2;
private JButton b3;
private JButton b4;
private JButton b5;
private JPanel p1;
private JPanel p2;
private JPanel p3;
private JPanel p4;
private JPanel p5;

/** Creates a new instance of WW */
public WW() {
setSize(800,600);
init();
setVisible(true);
}
private void init(){
setLayout(new BorderLayout());

p1 = new JPanel();
p2 = new JPanel();
p3 = new JPanel();
p4 = new JPanel();
p5 = new JPanel();
p2.setBackground(Color.MAGENTA);
p3.setBackground(Color.YELLOW);
p4.setBackground(Color.GREEN);
p5.setBackground(Color.BLUE);


p1.setLayout(new GridLayout(1,4));

b1 = new JButton("Ventana 1");
b2 = new JButton("Ventana 2");
b3 = new JButton("Ventana 3");
b4 = new JButton("Ventana 4");

b1.addActionListener(new MuestraVentana(1));
b2.addActionListener(new MuestraVentana(2));
b3.addActionListener(new MuestraVentana(3));
b4.addActionListener(new MuestraVentana(4));

p1.add(b1);
p1.add(b2);
p1.add(b3);
p1.add(b4);




jdp = new JDesktopPane();

ji1= new JInternalFrame("Ventana interna 1");
ji2= new JInternalFrame("Ventana interna 2");
ji3= new JInternalFrame("Ventana interna 3");
ji4= new JInternalFrame("Ventana interna 4");

ji1.setSize(200,100);
ji2.setSize(200,100);
ji3.setSize(200,100);
ji4.setSize(200,100);


ji1.setVisible(false);
ji2.setVisible(false);
ji3.setVisible(false);
ji4.setVisible(false);

jdp.add(ji1);
jdp.add(ji2);
jdp.add(ji3);
jdp.add(ji4);

add(jdp,BorderLayout.CENTER);
add(p1,BorderLayout.SOUTH);
}

private class MuestraVentana implements ActionListener{
int num_ventana;
public MuestraVentana(int num_ventana){
this.num_ventana = num_ventana;
}
public void actionPerformed(ActionEvent e){
if ( num_ventana == 1){
ji1.setVisible(true);
jdp.setSelectedFrame(ji1);
ji1.toFront();

}
if ( num_ventana == 2){
ji2.setVisible(true);
jdp.setSelectedFrame(ji2);
ji2.toFront();

}
if ( num_ventana == 3){
ji3.setVisible(true);
jdp.setSelectedFrame(ji3);
ji3.toFront();

}
if ( num_ventana == 4){
ji4.setVisible(true);
jdp.setSelectedFrame(ji4);// Esto hace que sea el seleccionado en el JDesktopPane
ji4.toFront();// Este método es el que hace que venga al frente cada vez que es creado

}

}
}
public static void main(String args[]){
new WW();
}
}