Author Topic: Bloquear JFrame  (Read 52392 times)

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Bloquear JFrame
« on: Julio 18, 2008, 07:01:45 pm »
Hola a todos,

tengo una duda referente al bloqueo de un JFrame, y es que yo en un momento dado de mi programa quiero evitar que el usuario mueva la ventana principal de la aplicación. Para ello, hago lo siguiente:

Code: [Select]
this.setEnabled(false);
Bloqueando de esta forma el JFrame. El tema está en que en ese JFrame tengo un botón en la parte inferior que no quiero deshabilitar, sino que se encuentre activo. ¿Existe alguna manera de deshabilitar el JFrame pero no de deshabilitar tal botón? He conseguido esto pero con un JDialog, añadiendo los paneles oportunos que me interesaban y funciona, pero no sé cómo enfocar este problema para resolverlo. ¿Sería posible?

Espero que alguien me pueda echar una mano. Gracias y un saludo.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #1 on: Julio 18, 2008, 11:03:58 pm »
Hola:

¿Has probado a llamar a setEnabled() del botón después de haber deshabiliado el resto?

Se bueno.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #2 on: Julio 19, 2008, 02:07:04 am »
Sí, y eso no funciona, así que no sé cómo puedo hacerlo :(.

¿Alguna idea más?

Gracias.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #3 on: Julio 19, 2008, 03:18:23 am »
No sé si acabo de entender el problema. El JDialog y el JFrame deberían comportarse igual en cuanto a habilitado se refiere. ¿No puedes hacer con el JFrame lo que has hecho con el JDialog?.

En cualquier caso, al JFrame puedes ponerle dos paneles. Uno de ellos con todo excepto el botón y en el otro el botón. Quizás deshabilitando el panel, se deshabilite todo lo de dentro.

Se bueno.

manix

  • Sr. Member
  • ****
  • Posts: 361
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #4 on: Julio 19, 2008, 04:29:06 am »
hola

pues al deshabilitar el frame o algun otro contenedor se deshabilitan todos sus compoenetes que estan ensu lista de componenentes. Lo que hay que hacer es separar todos los componentes que quieres deshabiliar en un contenedor y lo que quieres que sea habilitado en otro contendor por aparte. Lo que dice chui pues

saludos

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #5 on: Julio 19, 2008, 05:31:04 pm »
Es cierto lo que comentais, gracias por vuestras respuestas, pero el tema es que no solamente quiero deshabilitar un jpanel para que no esté activo lo de dentro, sino deshabilitar todo el jframe para evitar que en ciertas situaciones el usuario pueda mover la ventana. De esta forma, evito que el usuario mueva la ventana de un lugar de la pantalla a otro, debido a que en ciertas partes del programa el jframe no está a pantalla completa.

Por eso, he visto que una buena solución al problema es deshabilitarlo, y me funciona, excepto ese botón que comento, que evidentemente no me funciona porque también forma parte de los componentes de ese jframe.

Voy a probar a meterlo en otro componente a ver si así me funcionara. Saludos.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #6 on: Julio 19, 2008, 05:49:16 pm »
Hola:

Deshabilitarlo es que no se pueda apretar botones y cosas que hay dentro. Para impedir que se mueva, usa cosas como setResizable(), setUndecorated(), etc. El primero impide que se pueda redimensionar, el segundo quita la barra de título y así no se puede mover (salvo quizás con la combinación de teclas adecuada).

Se bueno.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #7 on: Julio 19, 2008, 06:17:57 pm »
Conocía esos métodos, de hecho, uso setResizable(false) para evitar que se redimensione la ventana. El setUndecorated(false) también lo probé, pero mi idea no es la de quitar la barra de título, sino el impedir que los usuarios muevan a través de la pantalla la ventana de la aplicación, quedándose de esta forma siempre centrada en la pantalla, ¿me entiendes?.

No sé si es un poco raro lo que pretendo o no, pero es que en ese jframe tengo varios jdialogs, que al mover el jframe, los paneles siguen centrados, con lo que no se mueven y eso no es lo que quiero (deben moverse tales jdialogs).

Por eso, había pensado que el setEnabled sería una solución sencilla, pero por lo que estoy viendo, me está dando también problemas:s. Necesito ideassssss:(

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #8 on: Julio 20, 2008, 12:27:10 am »
Hola:

¿El problema es que no quieres que se mueva el JFrame o que quieres que los paneles no se queden centrados y se muevan con el JFrame?

Se bueno.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #9 on: Julio 20, 2008, 02:01:13 am »
Yo quiero que los paneles se muevan con el JFrame, pero no he encontrado solución alguna si no es bloqueando el propio JFrame para evitar que éste se mueva. Así, consigo impedir que el usuario lo mueva y los paneles se queden descentrados, es decir, no se muevan con el JFrame, cosa que no quedaría muy vistosa.

Por tanto, pensé en bloquear el JFrame y evitar esos problemas, pero ahora me encuentro con este tema del botón, que también se bloquea, y no sé forma alguna de resolverlo :(.

¿Me entiendes ahora? Espero haberme explicado adecuadamente, pero si no lo entiendes, postéame y te lo explico mejor, todo sea por arreglar este pequeño "problema" que debo resolver lo antes posible.

Saludos.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #10 on: Julio 20, 2008, 02:22:47 am »
Buenas:

Imagino que será más fácil arreglar lo de los paneles, pero tienes que dar más detalles.

Si al JFrame le añades paneles así

frame.getContentPane().add(unPanel);

debe moverse con el frame sin problemas. Imagino, por lo que comentas de los JDialog, que cuando hablas de paneles en realidad te refieres a los JDialog. Es decir, tienes un JFrame con varios JDialog que pretendes que se queden dentro del JFrame al mover el JFrame. ¿es así?

Si es así, la opción correcta es crear el JFrame, meter dentro un JDesktopPane junto con los botones que quieras

Code: [Select]
JDesktopPane dp = new JDesktopPane();
JButton b = new JButton("boton");
frame.getContentPane().add(dp);
frame.getContentPane().add(b, BorderLayout.SOUTH);

y ahora, en vez de usar JDialog, usa JInternalFrame y los metes dentro del JDesktopPane. Con eso consigues que los JInternalFrame no se salgan del JDesktopPane y este no se sale del JFrame, aunque lo muevas.

Aquí tienes un ejemplo de JDesktopPane.

Se bueno.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #11 on: Julio 21, 2008, 01:49:09 am »
Chuidiang, he probado tal y como me lo has dicho en la respuesta anterior y funciona, ahora me tengo que poner manos a la obra a cambiar todo para que se quede similar en todos los JDialog's. Una preguntilla más quisiera hacerte, ¿es posible eliminar la barra de título que aparece dentro de los JInternalFrame's?

Si no se puede no pasa nada, pero sería una opción bastante interesante, ya que en los JDialog's los tenía así, de manera que pudiera unificar más o menos el aspecto que tenía anteriormente.

De todas maneras, gracias por tu ayuda, un saludo.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #12 on: Julio 21, 2008, 02:56:07 am »
.... Una cosilla más:

¿Sin el JDestokPane, porqué no funciona el JInternalFrame? ¿No es posible implementar un JInternalFrame sin que se encuentre dentro de un JDestokPane?

Es que con el JDestokPane vuelvo a tener problemas....:(

¡¡¡¡¡Que desesperaciónnnnnn!!!!! :d

Saludos.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Bloquear JFrame
« Reply #13 on: Julio 21, 2008, 03:12:31 am »
Hola:

El JDesktopPane sabe controlar los JInternalFrame y por eso se usa. Si no quieres usarlo, puedes no usarlo, pero debes ser tú entonces el que te encargues de hacer toda la gestión de los JInternalFrames.

¿Qué problemas te está dando?

Se bueno.

luis

  • Full Member
  • ***
  • Posts: 111
  • Karma: 0
    • View Profile
Re: Bloquear JFrame
« Reply #14 on: Julio 21, 2008, 03:30:49 am »
El problema principal que encuentro ahora es que cuando intento añadir un JLabel al JDesktopPane no me lo añade, y tengo el siguiente código:

Code: [Select]
       
        javax.swing.JDesktopPane dp = new javax.swing.JDesktopPane();
        this.setContentPane(dp);
        dp.add(panelTab);
        dp.add(botonSalir);
        dp.add(hora);
        dp.setPreferredSize(new Dimension(10, 10));
        dp.setBackground(Color.GRAY);
        identificacion.pack();
        dp.add(identificacion);
        menuInicial.pack();
        dp.add(menuInicial);

Cuando aparece la ventana me gustaría que apareciera la hora, que la tengo en un JLabel que se va actualizando, ese JLabel se denomina 'hora' en el código expuesto, pero no me lo añade. ¿Qué estoy haciendo mal?

Saludos.

 

ey