¿Cómo maximizar y desmaximizar frames (internos) en un desktop?

Paula22
13 de Octubre del 2005
El problema surge cuando un frame se maximiza, y a continuación se cierra, el siguiente frame que se lance estará maximizado. ¿Hay alguna manera de que por defecto no vaya maximizado?


public static JDesktopPane ESCRITORIO = new JDesktopPane();

public MyInternalFrame() {
super("Introduzca el nombre del animal",
true, //resizable
true, //closable
false, //maximizable <--- esto solo quita el boton de maximizar, pero no impide que el frame sea maximizado de forma indirecta.
false);//iconifiable


Los metodos this.setMaximizable(false); no desmaximiza el frame.


jhonnybmx
13 de Octubre del 2005
mira a ve si te sirve


//agradecimientos a su maestro Jhonny Salgado sierra



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


/* PRIMERO, HACEMOS NUESTRA VENTANA PRINCIPAL, ES DECIR, LA QUE CONTENDRÁ
* A LAS VENTANAS INTERNAS.
*/

public class prueba extends JFrame{
static JDesktopPane desktop = null; //ESTE OBJETO CONTIENE A LOS JInternalFrame
JButton btnuevo = new JButton("Crear Ventana");
JButton actual = new JButton("Obtener Ventana Actual");
private JEditorPane texto;
JPanel principal = new JPanel(new BorderLayout());
JPanel boton = new JPanel(new FlowLayout());
public JScrollPane barra;


public prueba(){


super("Muestra de JInternalFrame");//titulo

desktop = new JDesktopPane();//INSTANCIAMOS EL OBJETO


//AL PANEL boton, AGREGAMOS LOS BOTONES QUE TENEMOS (crear y actual)
boton.add(btnuevo);
boton.add(actual);


principal.add(boton, BorderLayout.NORTH);
principal.add(desktop, BorderLayout.CENTER);

getContentPane().add(principal);
setSize(500, 500);

//PARRA CERRAR LA VENTANA
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});

//EVENTO QUE OCURRE AL PRESIONAR EL BOTON DE CREAR LA VENTANA
btnuevo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
nuevaHoja();
}
});

//EVENTO QUE OCURRE AL PRESIONAR EL BOTON DE OBTENER LA VENTANA ACTUAL
actual.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
Ventana ve = getActual();
JOptionPane.showMessageDialog(null, "VENTANA ACTUAL: "+ve.getTitle(), "Ventana Seleccionada", JOptionPane.INFORMATION_MESSAGE);
}
});




}//FIN DEL CONSTRUCTOR DE LA CLASE PRINCIPAL

//EL SIGUIENTE METODO OBTIENE LA VENTANA ACTUAL (SELECCIONADA)
public static Ventana getActual(){
return (Ventana)desktop.getSelectedFrame();
}



/* EL SIGUIENTE CODIGO, INSTANCIA LA CLASE Ventana, LA CUAL ES LA REPRESENTACION
* DE LAS VENTANAS INTERNAS A TRABAJAR..."
**/
public void nuevaHoja(){
Ventana frame = new Ventana();
frame.setVisible(true); //NECESARIO PARA QUE SE MUESTRE
desktop.add(frame);//AGREGO LA NUEVA VENTANA AL CONTENEDOR DE VENTANAS INTERNAS
texto = new JEditorPane();
barra = new JScrollPane(texto);
frame.add(barra);//agregar texto a la ventana

try{
frame.setSelected(true);
}catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.OK_OPTION);
}
}


public static void main(String args[]){
//EN EL SIGUIENTE try/catch, ESTÁ EL CODIGO PARA TENER LA APARIENCIA DE Micro$oft Windows...
// try{
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
// }catch(Exception e){
// System.out.println(e);
// }
prueba p = new prueba();
p.setVisible(true);




}



}//FIN DE LA CLASE PRINCIPAL



//A CONTINUACION, HACEMOS LA CLASE QUE REPRESENTARÁ A LAS VENTANAS INTERNAS
class Ventana extends JInternalFrame{
public static int numVentana = 1;
public static int x = 45, y = 45;

public Ventana(){
super("texto #"+ (numVentana++),//título de la ventana
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable

setSize(300, 200); //EL TAMAÑO QUE TENDRA CADA VENTANA INTERNA...

setLocation((x*numVentana)/2, (y*numVentana)/2); //POSICION DE LA VENTANA INTERNA
}//FIN DEL CONSTRUCTOR DE LA CLASE QUE REPRESENTA LAS VENTANAS INTERNAS
}//FIN DE LA CLASE QUE REPRESENTA LAS VENTANAS INTERNAS