¿Cómo maximizar y desmaximizar frames (internos) en un desktop?
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.
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.
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
//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