Java - Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

 
Vista:

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Hermann Hans (6 intervenciones) el 23/01/2013 02:34:10
Hola quisiera que alguien me pueda ayudar
tengo un jFrame que me sirve de ventana principal
en este tengo un jDesktopPane donde abro los jInternalFrame
pero mi problema radica en que los jInternalFrame se abran cuantas veces los llame o de clic

quisiera saber como hacer para que solo se abra una sola vez y me salga un mensaje (JOptionPane)
donde diga que el jInternalFrame ya esta abierto

Gracias espero sus respuestas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Hermann Hans (6 intervenciones) el 23/01/2013 03:50:52
Bueno ya lo solucione
Gracias y Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 686
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por xve (345 intervenciones) el 23/01/2013 07:53:00
Hola Hermann, nos puedes indicar como los solucionaste?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Hermann Hans (6 intervenciones) el 24/01/2013 03:04:14
aqui se las dejo, espero les ayude

primero declarar el nombre del jInternalFrame de esta forma

public class View_Principal extends javax.swing.JFrame {

View_MovilidadesGruas masc ;

luego para verficar si esta cerrado o abierto algun jInternalFrame

public static boolean estacerrado(Object obj){
JInternalFrame[] activos=jDesktopPane1.getAllFrames();
boolean cerrado=true;
int i=0;
while (i<activos.length && cerrado){
if(activos[i]==obj){
cerrado=false;
}
i++;
}
return cerrado;
}

y por ultimo en el evento action performed o mousecliked
en mi caso de un JMenuItem

if(estacerrado(masc)) {
masc = new View_MovilidadesGruas();
jDesktopPane1.add(masc);
masc.setVisible(true);

}
else
{
JOptionPane.showMessageDialog(null,"LA VENTANA MOVILIDADES YA ESTA ABIERTA");
}


y con eso valida que solo se abra una vez el jInternalFrame cuando lo llamo del JMenuBar
pero ahora tengo otra duda

Tengo un formulario donde apretando un boton llamo a otro JInternalFrame
y ahi si tengo problema, porque lo llamo al otro JIFrame, luego cierro el formulario de donde llame, abro otra vez, otra vez llamo al JIFrame con el boton y ahi no lo valida
y si vuelvo a cerrar y vuelvo a abrir, otra vez lo llama y ya abrian muchos JIFrame abiertos con el boton

Si alguien puede ayudarme les agradeceria bastante
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por joel (1 intervención) el 20/11/2013 19:50:19
yo lo hice asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void ControlaInstancia(JInternalFrame inter){
 
boolean mostrar=true;
String Nombre=inter.getTitle();
for (int a=0;a<jDprincipal.getComponentCount();a++){     // verificar si es instancia de algun componente que ya este en el jdesktoppane
    if( inter.getClass().isInstance( jDprincipal.getComponent(a) )){
        JOptionPane.showMessageDialog(rootPane, "La ventana "+Nombre+" que interta abrir ya está abierta, cierre la ventana actual e intente nuevamente");
        System.out.println("esta instancia, no se debe mostrar");
        inter.toFront();
        jDprincipal.moveToFront(inter);
        mostrar=false;
 
    }else{
        System.out.println("no lo es, puede mostrarse");
    }
}
if(mostrar){
    inter.setSize(GetMedidaEcritorio());
    jDprincipal.add(inter); }
inter.show();
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Luis Angel (8 intervenciones) el 05/12/2013 06:00:04
Está muy bien el codigo, gracias por el aporte, lo único es que no valida cuando la ventana está minimizada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Samuel (1 intervención) el 17/02/2014 21:30:22
Excelente, me sirvió mucho el aporte, gracias por tu desinteresada colaboración
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Mijael (1 intervención) el 07/05/2014 23:30:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// en el InternalFrame poner los nombre en getToolTipText de propiedades ahora para cerrar un InternalFrame  cerrar // con dispose(); pa evitar problemas 
 
 public static void AbrirForm(JInternalFrame InternalFra)
    {
 
        String k="";
 
        JInternalFrame[]  a =ContenedorFormularios.getAllFrames();
        int filas =a.length;
        for(int i=0;i<filas;i++)
            {
                String c=a[i].getToolTipText();
 
                if (InternalFra.getToolTipText().compareTo(c)==0) {
 
                   k="Abierto";
 
 
                } else {
                }
            }
        if (k.compareTo("")==0) {
             ContenedorFormularios.add(InternalFra);
             InternalFra.show();
 
        } else {
 
            JOptionPane.showMessageDialog(" ya se encuentra abierta  " +getToolTipText());
 
 
        }
 
 
    }
 
 
// para usarlo ejemplo 
// fmClientes Clientes=new fmClientes();
//        AbrirForm(Clientes);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Kevin Arévalo (1 intervención) el 04/12/2014 00:35:36
hola buenas creo que vine muy tarde, pero tengo otra solución más sencilla.

crear el objeto a nivel de clase (no se si es recomendable)

1
frmIngresarCompra objIC=new frmIngresarCompra();

y en la acción del menú o botón colocar esto:

1
2
3
4
5
6
7
8
9
10
11
private void mitIngresarCompraActionPerformed(java.awt.event.ActionEvent evt) {
	if(objIC.isShowing())
	{
		//mensaje de que está abierto si se desea
	}
	else
	{
	jDesktopPane1.add(objIC);
	objIC.show();
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Alex Arth (1 intervención) el 11/12/2014 20:58:46
Amigo tu Condicion me Sirvio andube buscando esto en muchos videos y paginas y esta condicion me ayudo gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Brian
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Brian (8 intervenciones) el 19/05/2020 21:59:14
Saludos, 7 años despues les vengo con una opción más simple y para resolver este asunto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean JInternalFrames_Abiertos(){ // Creamos un metodo publico de tipo boolean.
    JInternalFrame [] jif_Activos = VentanaPrincipal.jDPprincipal.getAllFrames(); // Este arreglo almacena todos los JInternalFrames que esten abierto en el jDesktopPane.
 
    for (int i = 0; i < jif_Activos.length; i++) { // Creamos un ciclo for para recorrer nuestro arreglo utilizando la propiedad length de nuestro arreglo.
 
        // Validamos con un if si nuestro arreglo en la posición i es igual al JInternalFrame que esta activo en el jDesktopPane, si es igual devolverá true.
        if (jif_Activos[i] == VentanaPrincipal.jDPprincipal.getSelectedFrame()) {
            JOptionPane.showMessageDialog(null, "La ventana que esta intentando abrir ya esta abierta.", "Información", JOptionPane.INFORMATION_MESSAGE);
            return true;
        }
 
    }
    return false;
}

Este código en pocas lineas evitara que se abra más de un JIF en el mismo JDesktopPane. Luego de que tengan este metodo hecho pueden implementarlo en cualquier parte del código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Brian
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Brian (8 intervenciones) el 19/05/2020 23:13:33
Y si solo quieres limitar a que no se abra el mismo JIF más de una vez en el mismo jDesktopPane puedes modificar el método de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean JInternalFrames_Abiertos(JInternalFrame jif){ // Creamos un metodo publico de tipo boolean.
     JInternalFrame [] jif_Activos = VentanaPrincipal.jDPprincipal.getAllFrames(); // Este arreglo almacena todos los JInternalFrames que esten abierto en el jDesktopPane.
 
     for (int i = 0; i < jif_Activos.length; i++) { // Creamos un ciclo for para recorrer nuestro arreglo utilizando la propiedad length de nuestro arreglo.
 
          // Validamos con un if si nuestro arreglo en la posición i es igual al JInternalFrame que esta activo en el jDesktopPane, si es igual devolverá true.
          if (jif.getClass().isInstance(jif_Activos[i])) {
                JOptionPane.showMessageDialog(null, "La ventana que esta intentando abrir ya esta abierta.", "Información", JOptionPane.INFORMATION_MESSAGE);
                return true;
          }
     }
     return false;
}

De esta forma podras abrir más JIF que sean diferentes (OJO, diferentes en cuanto a instancias o nombre del objeto, si el mismo JIF tiene varias instancias y en cada una los objetos tienen nombres diferentes se podrán abrir en el mismo jDesktopPane).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Freddy (1 intervención) el 22/04/2021 16:29:37
Amigo buenas disculpa en el codigo (VentanaPrincipal.jDPprincipal.getAllFrames) que son estas partes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Brian
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Brian (8 intervenciones) el 29/04/2021 03:19:04
Buenas @Freddy,

Son objetos,

VentanaPrincipal: es un Jframe.

jDPprincipal: es un JDesktopPane.

Te explico, jDPprincipal (jDesktopPane) es hijo de VentanaPrincipal (jFrame), entonces, lo que estoy haciendo es primero crear un arreglo de tipo jInternalFrame donde usando el metodo getAllFrames() de mi objeto jDPprincipal, captare todos los jInternalFrame que esten abiertos en mi jDesktopPane y los almacenare un este arreglo.

1
JInternalFrame [] jif_Activos = VentanaPrincipal.jDPprincipal.getAllFrames(); // Este arreglo almacena todos los JInternalFrames que esten abierto en el jDesktopPane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Novato (2 intervenciones) el 20/09/2021 21:24:45

Ayuda a un novato




Soy nuevo en esto donde agregaría el código al internal frame o al frame principal?
puse el metodo al final de todo y lo mande a llamar en el evento click me dice "La ventana que esta intentando abrir ya esta abierta." pero abre otro internal frame, que hice mal?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Brian
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Brian (8 intervenciones) el 21/09/2021 14:48:19
debes de poner el código dentro de una estructura if / else ya que al momento de llamar el InternalFrame primero debe validar si hay otro abierto, si la condición es True, pues no te deja abrir el nuevo InternalFrame, si es false pues que se habrá el nuevo.

Si hubiera compartido tu código te hubiese indicado en que lugar lo deberías de poner, pero con lo que te explique creo que basta para que lo puedas implementar debidamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Novato (2 intervenciones) el 23/09/2021 03:00:56

Ayuda a un Novato



hola amigo que tal, mira te explico un poco mas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Mi JDestokPane se llama Desktop
 
public class VentanaPrincipal extends javax.swing.JFrame {
    public boolean JInternalFrames_Abiertos(JInternalFrame jif)
    {
        JInternalFrame [] jif_Activos = Desktop.getAllFrames();
        for (int i = 0; i < jif_Activos.length; i++)
        {
            if (jif.getClass().isInstance(jif_Activos[i]))
            {
                JOptionPane.showMessageDialog(null, "La ventana que esta intentando abrir ya esta abierta.", "Información", JOptionPane.INFORMATION_MESSAGE);
                return true;
            }
            else{
                Ventana3 v3=new Ventana3();
                Desktop.add(v3);
                v3.show();
            }
        }
        return false;
    }
}
 
// Este código lo tengo dentro de un mousecliked event
//Me marca error el jif_Activos
boolean r=JInternalFrames_Abiertos(jif_Activos);
        if(r==true)
        {
            System.out.println("No se puede abrir");
        }
        else
        {
            Ventana1 v1=new Ventana1();
            Desktop.add(v1);
            v1.show();
        }
//No sé si así este bien porque lo metí en un if, pero no sé si estructure bien el if
//aclarando que tengo varios internalFrame, pero lo que quiero hacer es que solo se abra uno de cada uno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Brian
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Como evitar que un jInternalFrame se abra dos veces en un jDesktopPane

Publicado por Brian (8 intervenciones) el 23/09/2021 15:22:19
Lo que debes hacer es lo siguiente:

Primero, crea el método:

1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean JInternalFrames_Abiertos(JInternalFrame jif){ // Creamos un metodo publico de tipo boolean.
     JInternalFrame [] jif_Activos = VentanaPrincipal.jDPprincipal.getAllFrames(); // Este arreglo almacena todos los JInternalFrames que esten abierto en el jDesktopPane.
 
     for (int i = 0; i < jif_Activos.length; i++) { // Creamos un ciclo for para recorrer nuestro arreglo utilizando la propiedad length de nuestro arreglo.
 
          // Validamos con un if si nuestro arreglo en la posición i es igual al JInternalFrame que esta activo en el jDesktopPane, si es igual devolverá true.
          if (jif.getClass().isInstance(jif_Activos[i])) {
                JOptionPane.showMessageDialog(null, "La ventana que esta intentando abrir ya esta abierta.", "Información", JOptionPane.INFORMATION_MESSAGE);
                return true;
          }
     }
     return false;
}

Segundo, dentro del método mousecliked event implementa el método JInternalFrames_Abiertos() de la siguiente manera:

1
2
3
4
5
Ventana1 v1=new Ventana1();
if(JInternalFrames_Abiertos(v1)== false) { //Solo si es false se abrirá el InternalFrame ya que si devuelve true es porque esta abierto el mismo InternalFrame.
     Desktop.add(v1);
     v1.show();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar