Consejos útiles

JWindow, JFrame, JDialog

¿Cuál es la forma correcta de abortar una aplicación Swing del código y cuáles son las trampas?

Traté de cerrar mi aplicación automáticamente después de que el temporizador funcionara. Pero simplemente llamar a dispose () en el JFrame no funcionó: la ventana desapareció, pero la aplicación no finalizó. Sin embargo, cuando cierra la ventana con el botón Cerrar, la aplicación finaliza. Que debo hacer

Su acción de cierre JFrame predeterminada se puede establecer en "DISPOSE_ON_CLOSE" en lugar de EXIT_ON_CLOSE (por qué las personas siguen usando EXIT_ON_CLOSE fuera de mí).

Los métodos JFrame más útiles.

MétodosDescripción
setLocation ()Este grupo de métodos le permite establecer la posición y el tamaño de la ventana en la pantalla. setLocation () establece la posición de la ventana, setSize () le permite especificar su tamaño, y usando setBounds () puede establecer inmediatamente el rectángulo que ocupará su ventana en la pantalla
setSize ()
setBounds ()
rask ()Le permite "empacar" los componentes disponibles en la ventana, para que ocupen todo el espacio que necesiten. Cuando se llama a este método, los componentes pasan al estado "visible", aunque no aparecen en la pantalla hasta que se llama a uno de los siguientes métodos
show ()Muestra una ventana en la pantalla. Después de llamar a estos métodos, los componentes pasan al estado "visible" y comienzan a ser atendidos por la cola de eventos. El método show () también valida los componentes contenidos en la ventana.
setVisible ()
disponer ()Elimina la ventana de la pantalla (si está visible en el momento en que se llama al método) y libera todos los recursos que le pertenecen.

JWindow Window

El "padre" de todas las ventanas Swing es una ventana sin borde y sin controles Jwindow.

Clase Jwindow Es una ventana sin marco y sin controles destinados, por ejemplo, a cerrarla o moverla. Este tipo de ventana proporciona opciones de personalización mínimas, a diferencia de la ventana JFrame más utilizada. A menudo no se requiere una ventana sin marco en los programas. Sin embargo, en algunos casos puede ser útil, especialmente en los casos en que es necesario mostrar brevemente cierta información, como una pantalla de bienvenida del programa o un aviso para el usuario, y no es necesario administrar una ventana con esta información.

Ventanas Jwindow utilizado por los menús emergentes de JPopupMenu en situaciones donde no hay suficiente espacio en la ventana de la aplicación para colocar un componente ligero en la capa POPUP_LAYER del panel multicapa, donde los menús emergentes están ubicados de forma predeterminada. En esta situación, en lugar de un componente liviano, se crea una pequeña ventana sin un marco JWindow, que se puede colocar en cualquier lugar de la pantalla, ya que pertenece al sistema operativo. Esta ventana también contiene un menú emergente.

Considere el ejemplo de JWindowTest. La idea básica de usar una ventana sin marco Jwindow consiste en copiar parte de la "imagen del escritorio" en la ventana de la aplicación. Gracias a la clase Robot que apareció en el paquete JDK 1.3, puede "capturar" una copia de pantalla del escritorio.

JWindow ejemplo

En este ejemplo, la aplicación hereda de la ventana Jwindowpara que sea más fácil llamar a los métodos de esta clase y agregar componentes a la ventana. Se debe crear un objeto Robot en un bloque de prueba. atrapar, porque su creación puede estar prohibida por el administrador de seguridad utilizado por la máquina virtual Java. Sin embargo, una violación de seguridad no nos amenaza, porque estamos creando una aplicación separada, no un applet.

Cortamos parte de la imagen de "escritorio" usando el método createScreenCapture () a un lado de la ubicación de nuestra ventana. Luego, el componente ImageDraw se agrega al panel de contenido de la ventana, que muestra la imagen de escritorio recortada. Después de que la ventana se muestra en la pantalla, el programa se queda dormido durante 10 segundos y luego termina su trabajo.

Captura de pantalla de escritorio con interfaz de ventana JWindow ejemplo presentado en la siguiente figura.

Antes de configurar la ventana, en el ejemplo JWindowTest, se llama al constructor de la clase base con la palabra clave super () sin parámetros. En realidad ventanas sin marco Jwindow necesariamente requieren al crear para indicar su "padre": una ventana con un JFrame, que no siempre puede ser un inconveniente. Especialmente para tales casos, se agregó un constructor sin parámetros a la clase JWindow, que crea una ventana JFrame invisible auxiliar y la usa como un "padre". Después de eso, todas las ventanas sin marco creadas de esta manera usan solo esta ventana y ahorran recursos.

También se debe tener en cuenta que al usar el constructor sin parámetros, se crea una ventana Jwindowincapaz de obtener el foco de entrada. Muy a menudo, este comportamiento es necesario (después de todo, las barras de herramientas, los salvapantallas emergentes y los menús no necesitan foco de entrada). Si necesita obtener el foco de entrada, use el método setFocusableWindowState (true).

Ventana Jframe

La ventana Jframe hereda las propiedades de la clase JWindow y es la ventana de uso más general utilizada en las aplicaciones. Las principales diferencias entre la ventana JFrame y JWindow:

  • la presencia de un marco que le permite cambiar el tamaño de la ventana,
  • la presencia de un título con el nombre de la aplicación (el título puede estar vacío),
  • la capacidad de usar el menú del sistema, que le permite manipular la ventana y la aplicación,
  • La presencia de botones de control para cerrar y minimizar la ventana.

La gran mayoría de las aplicaciones utilizan la clase para colocar componentes de interfaz de usuario Jframe. Desarrolladores Columpio Definió un método especial para cerrar la ventana setDefaultCloseOperation, que simplifica enormemente esta operación. Considera simple Jframe ejemplo (JFrameWindowListener) que maneja el evento de cierre de ventana.

Jframe ejemplo

El ejemplo crea una ventana. Jframe con la definición del encabezado en el constructor de la clase base. También puede usar el método setTitle () de la clase JFrame para determinar la barra de título de una ventana.

Antes de configurar el tamaño de la ventana y mostrarlo en la pantalla, se llama al método setDefaultCloseOperation (). Este método le permite especificar qué acción se realizará después del procesamiento preliminar del evento processWindowEvent () antes de cerrar la ventana. La constante predeterminada es HIDE_ON_CLOSE, que elimina una ventana de la pantalla cuando está cerrada. Puede usar el valor EXIT_ON_CLOSE, que indica que al cerrar la ventana es necesario finalizar la aplicación.

En el ejemplo, la constante DO_NOTHING_ON_CLOSE se pasa al método setDefaultCloseOperation; no haga nada cuando la ventana esté cerrada. A la ventana Jframe un oyente está conectado y el procesamiento de eventos de cierre de ventana se realiza en el método windowClosing. El algoritmo de procesamiento está diseñado para que la ventana se cierre en el tercer intento. El número de intento se muestra en la etiqueta de la interfaz.

En la siguiente figura se presenta una captura de pantalla del escritorio con la interfaz de ventana de nuestro programa.

Para determinar el icono de la ventana, debe usar el método setIconImage (). El icono se encuentra en el botón de la ventana minimizada o en el título de la ventana en el estado normal.

De las características adicionales de una ventana con marco Jframe Debe mencionarse su capacidad para "ocultar" sus "joyas": el marco y los controles de la ventana. Esto se hace mediante el método JWindow.

Eventos de ventana, WindowListener, WindowFocusListener

Las ventanas oscilantes (JWindow, JFrame, JDialog) admiten dos tipos de eventos:

  • WindowListener: le permite conocer los cambios en el estado de la ventana,
  • WindowFocusListener: informa que los componentes de la ventana reciben o pierden el foco de entrada

Puede encontrar una lista completa de métodos de datos de escucha en la documentación en línea de Java.

En la interfaz del oyente Windowlistener más a menudo que otros usan el método ventanallamado por el sistema de eventos cuando la ventana está cerrada. El ejemplo anterior lo demuestra claramente.

Para enmarcar Jframe Puede conectar un oyente de ventana creado sobre la base de Windowadapter (para no implementar todos los métodos definidos en la interfaz WindowListener) y anular el método windowClosing, como se presenta en las siguientes líneas de código:

Cuando sale del programa, se abre un cuadro de diálogo en el panel JOptionPane y se le pide confirmación al usuario si realmente quiere terminar de trabajar con la aplicación. Si la respuesta es sí, entonces el programa termina.

Cuadro de diálogo JDialog

Los cuadros de diálogo se utilizan con mayor frecuencia en las aplicaciones para obtener información adicional con el fin de establecer los parámetros de la aplicación y mostrar información auxiliar / de depuración importante. Los cuadros de diálogo, por regla general, se crean por modal, bloqueando el acceso a otras ventanas de la aplicación, hasta que el usuario termina de trabajar con el cuadro de diálogo modal. Los cuadros de diálogo modales se encuentran en la parte superior de la ventana principal de la aplicación. La apariencia de los cuadros de diálogo difiere poco de las ventanas con un JFrame, pero generalmente tienen menos controles de ventana (la mayoría de las veces, solo hay un botón para cerrar la ventana) y no hay un menú del sistema.

En Swing, los diálogos son implementados por la clase Jialogheredado de la clase base de Windows JWindow y le permite crear cuadros de diálogo tanto regulares como modales. JDialog admite, como JFrame, el cierre de ventanas, y es similar a otras ventanas Swing.

Al crear cuadros de diálogo Swing, debe especificar una "ventana principal", que puede ser una ventana con un JFrame u otro cuadro de diálogo Jialog. También hay un constructor que no requiere una ventana "principal", pero utiliza una ventana transparente auxiliar, que se mencionó en la página "Ventana sin ventana JWindow".

Ejemplo de creación de diálogo JDialog

En el ejemplo, cree una ventana con un marco Jframe, cuyo panel de contenido contiene dos botones JButton. Al hacer clic en los botones, los cuadros de diálogo se crean en un método createDialog () separado. Cuadro de diálogo con un título dado Jialog puede ser modal y no modal. El programa te permite crear varias ventanas sin modo al mismo tiempo, pero solo una modal. Las ventanas sin modo no bloquean el trabajo con la ventana principal de la aplicación. Al cerrar el cuadro de diálogo, se usa la constante DISPOSE_ON_CLOSE, que elimina la ventana después del cierre.

La interfaz de operación del ejemplo JDialog se presenta en la siguiente captura de pantalla.

La biblioteca Swing proporciona un conjunto de cuadros de diálogo estándar. Jialog para recibir y mostrar información simple. Antes de crear su propio cuadro de diálogo, debería considerar usar uno estándar.

Decoración de la ventana

Comenzando con JDK 1.4, fue posible personalizar el llamado "diseño" visual de ventanas: marco, controles de ventana (cerrar o minimizar botones) y el menú del sistema. La necesidad de esto se ha sentido desde los primeros lanzamientos de Swing.

Hoy en día, la creación de varias interfaces de ventana es posible debido a las mejoras en la interfaz de usuario del panel raíz de JRootPane. El representante de UI le permite crear marcos especiales, títulos, menús del sistema y botones de control de ventanas, y colocarlos en el panel raíz según sea necesario, utilizando un administrador de ubicación especializado. El administrador de ubicación controla el espacio del panel raíz. Además, con el nuevo diseño de las ventanas, los elementos del sistema de la ventana están deshabilitados.

En las clases JFrame y JDialog, hay un método setDefaultLookAndFeelDecorated () estático, que proporciona la capacidad de diseñar todas las ventanas creadas.

Ejemplo de decoración de ventanas: decoración de JDialog

El ejemplo crea una ventana simple con un marco y un cuadro de diálogo. Antes de crear ventanas, se llama al método setDefaultLookAndFeelDecorated (), lo que significa que para las ventanas creadas Jframe y Jialog Se requerirá un diseño especial. A continuación, se determinan los tamaños de las ventanas y se muestran en la pantalla.

Debe prestar atención al método de panel raíz setWindowDecorationStyle (), que le permite personalizar la apariencia de la ventana. Si una ventana con un marco tiene solo un tipo de diseño, los cuadros de diálogo pueden verse diferentes según su propósito (presentación de información, mensaje de error, etc.). En el ejemplo, se determinó que el cuadro de diálogo creado es necesario para mostrar información y debe verse en consecuencia.

La interfaz del ejemplo de ventanas decoradas con la apariencia de Metal se presenta en la siguiente captura de pantalla.

La decoración especial de ventanas puede ser útil como una herramienta que le permite controlar completamente, hasta ventanas, la apariencia de su aplicación. Al crear su propio representante de UI para el panel raíz, puede darle a su aplicación una apariencia única que los usuarios puedan reconocer fácilmente.

Java Swing. Ventana simple con botón


Crear un archivo Mywindow.java:


Aquí está la variable balance hemos hecho un atributo de la clase para que se pueda acceder desde el método de esta clase. Por una razón similar, colocamos la etiqueta. balanceLabel en el atributo de clase, y esto nos permitió acceder desde el método updateBalance ().
En el botón btnIncrease configuramos un oyente de eventos instanciando una clase Actionlisteneren el cual el método fue redefinido acción realizada.

Mira el video: JAVA Swing para principiantes - JButton, JPanel, JDialog (Noviembre 2019).