Fuente del artículo: Entusiasta de la informática Autor: Zhang Jian
¿Quién sabe cuánta arena y piedra se utilizó para construir la Torre de Babel? ¿Quién sabe cuántos días y noches se necesitaron para construir Roma? Lo único que sabemos es que sin ladrillos y piedras, no habría Gran Muralla que serpentea miles de kilómetros; sin la acumulación de cantos rodados y arcilla, no habría pirámides eternas. Se puede ver que la preparación de conocimientos básicos es crucial para que podamos aprender cualquier cosa. Entonces, ¡comencemos por comprender algunas funciones básicas de Swing y comencemos nuestro gran proyecto de construir Roma!
Prefacio
Java Café lleva abierto mucho tiempo. Si ya te gusta el sabor de la taza de café de Java, recuerda venir con frecuencia. Esta vez, hemos preparado una taza grande de café aromático para todos; basado en el desarrollo de un juego "Lianliankan", aprenderemos a usar Swing en Java contigo. Cuando pruebes esta taza de café con cuidado, lo harás. Descubrí que Java no sólo le da un sabor único a mi taza de café, sino que también aprendí a desarrollar juegos profesionales. ¡Es realmente lo mejor de ambos mundos!
Para que puedas echar un vistazo, la siguiente imagen es una captura de pantalla del juego. Puedes descargar el juego para probarlo (descargar el programa del juego; descargar el archivo fuente) y luego usar java -jar kyodai.jar para ejecutarlo en el modo de línea de comandos. Además, también puedes ir a mi página de inicio http://www.ismyway.com para descargar la versión independiente y la versión móvil de este juego para probarlo (ver Figura 1).
Java Cafe ha introducido el conocimiento de AWT antes, entonces, ¿cuál es la diferencia entre Swing y AWT? Cualquiera que estudie Java puede haber escuchado o visto los términos controles pesados y controles livianos. AWT es lo que generalmente llamamos controles pesados y Swing es un control liviano. Todos sabemos que el lema de Java es "escribir una vez, ejecutar en cualquier lugar", lo que también requiere que utilicemos código Java puro tanto como sea posible en nuestros programas. Desafortunadamente, AWT depende de una interfaz para la plataforma nativa, por lo que las interfaces creadas con AWT pueden verse ligeramente diferentes en diferentes sistemas operativos. Swing es completamente diferente. Swing está escrito en Java puro. Por lo tanto, la interfaz escrita en Swing puede garantizar la misma apariencia en todas las plataformas. Aquí hay otro truco: en el JDK, para una fácil diferenciación, todos los controles Swing comienzan con una letra J mayúscula, como JButton (el equivalente correspondiente en AWT es Button), para que pueda distinguir fácilmente los controles Swing de los controles AWT.
Primera experiencia de swing
Para aquellos que quieran aprender a programar Swing, hemos preparado especialmente algunos consejos para ustedes. Primero, es extremadamente necesario descargar y leer el código. Dado que este es un tutorial sobre Swing, solo tratamos de explicar parte del contenido relacionado con Swing tanto como sea posible. Los contenidos no relacionados con Swing generalmente no se cubrirán, como la parte del algoritmo. En segundo lugar, debido a limitaciones de espacio, es imposible escribir cada parte del código completamente aquí, por lo que también es necesario compararlo con el código completo. Finalmente, para que sea más fácil para todos concentrarse en aprender Swing, también hemos incluido los recursos necesarios para el desarrollo del juego en el archivo de descarga. Después de descargarlo, puede compilarlo y ejecutarlo y ver los resultados de la ejecución.
1. Contenedor de nivel superior
¿Qué es un contenedor de nivel superior? Cuando usamos Java para programación de gráficos, ¿dónde se dibujan los diagramas? Necesitamos un contenedor que pueda proporcionar dibujos gráficos. Este contenedor se llama contenedor de nivel superior. También puede considerarlo como una ventana. El contenedor de nivel superior es la base para la programación de gráficos. Todos los elementos gráficos deben incluirse en el contenedor de nivel superior. En Swing tenemos tres contenedores de nivel superior que se pueden utilizar, son:
・JFrame: se utiliza para diseñar aplicaciones similares al formulario de ventana en sistemas Windows.
・JDialog: similar a JFrame, excepto que JDialog se utiliza para diseñar cuadros de diálogo.
・JApplet: Se utiliza para diseñar subprogramas de Java que se pueden incrustar en páginas web.
Si necesitamos usar Swing para crear un programa de clase de ventana, nuestro código debería verse así:
importar javax.swing.*;
clase pública KyodaiUI
extiende JFrame {
…
}
2.Controles
Los controles son los elementos básicos que componen la interfaz de la aplicación. Los botones, cuadros de texto, barras de progreso, etc., son todos controles. Los controles (aquí solo analizamos los controles visuales) se pueden dividir en controles de contenedor y controles que no son de contenedor. Literalmente entendido, un control contenedor es un control especial que puede contener otros controles. Por ejemplo, el control JPanel en Java es un control contenedor. Podemos colocar controles que no sean contenedores, como botones y cuadros de texto, en JPanel. -Controles de contenedor como botones y cuadros de texto en JPanel. Coloque varios controles JPanel en él (vale la pena señalar que el contenedor de nivel superior también es un control de tipo contenedor. Cada aplicación de ventana tiene y solo puede tener un contenedor de nivel superior). control En otras palabras, el contenedor de nivel superior no se puede incluir en otros controles).
Hay muchos controles de contenedor en Java Además del JPanel que acabamos de mencionar, también existen JTabbedPane, JScrollPane, etc. Los controles que no son de contenedor incluyen JButton, JLabel, JTextField, etc. Si necesita agregar un control a un control de tipo contenedor, puede usar el método add(Component comp) para lograrlo, como por ejemplo:
Panel JPanel = nuevo JPanel();
Botón JButton = nuevo JButton();
panel.añadir(botón);
3. Diseño
¿Qué es el diseño? Layout es un sistema de gestión de interfaz utilizado en Java para controlar la disposición y posición de los controles. Las personas que han utilizado otros lenguajes de desarrollo de programación visual siempre sentirán que el diseño de la interfaz Java es incómodo cuando entren en contacto con él por primera vez: ¡no existe un método WYSIWYG para establecer coordenadas de control! Sin embargo, resulta que el sistema de gestión de diseño proporcionado por el propio Java también puede satisfacer bien nuestras necesidades y tiene más ventajas en el rendimiento multiplataforma.
Los diseños más utilizados son:
・BorderLayout: un sistema de gestión que divide la interfaz en áreas superior, inferior, izquierda, derecha y media. En el diseño BorderLayout, solo puede colocar un máximo de 5 controles. Si hay más de 5 controles, se recomienda su uso. otros sistemas de diseño.
・GridLayout: GridLayout es un sistema de gestión de diseño que corta la interfaz de usuario en un diseño similar a un tablero de ajedrez. Si queremos diseñar un software de calculadora similar al que viene con Windows, GridLayout es sin duda la mejor opción.
・FlowLayout: FlowLayout es diferente de los dos tipos de sistemas de gestión de diseño anteriores. En FlowLayout, no es necesario especificar dónde colocar cada control. Solo necesita agregar los controles a FlowLayout, y FlowLayout los colocará en orden. el orden en el que agrega los controles. El control se ajustará automáticamente si no hay suficiente espacio.
Después de tener una comprensión básica de estos sistemas de gestión de diseño, entremos juntos en el diseño de interfaces. Después de observar cuidadosamente la configuración de "Lianliankan" en los juegos QQ, podemos encontrar que toda la interfaz está dividida en tres áreas: la parte superior es el área del menú del sistema, el área más grande es el área de juego del usuario y también hay una interacción del usuario. Áreas, cada área se compone de varios controles.
Con tantos controles, ¿por dónde empezamos? Dado que se pueden colocar otros controles en el control del contenedor, solo necesitamos determinar qué control del contenedor colocar primero. Ahora que sabemos la cantidad de controles de contenedor que necesitamos usar, pasemos a la selección del sistema de gestión de diseño. ¿Usar GridLayout? ¿Parece un poco forzado usar FlowLayout? ¿Existe una mejor opción? Por cierto, creo que debes haber pensado en BorderLayout, como se muestra en la Figura 2 a continuación.
Antes de comenzar, todos deben prestar atención al hecho de que el diseño de la interfaz primero debe considerar el tamaño, ya sea el tamaño de la interfaz principal del programa o el tamaño de cada área. Si no se diseña el tamaño apropiado, será muy difícil. doloroso cambiarlo en el futuro.
El siguiente es el programa fuente correspondiente:
importar java.awt.*;
importar javax.swing.*;
La clase pública KyodaiUI extiende JFrame {
público KyodaUI() {
this.setSize(780, 500); //Establece el tamaño del formulario en 780*500;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //No se puede cambiar el tamaño del formulario
this.setTitle("Lianliankan"); //Establece el título
Barra de herramientas JPanel = nuevo JPanel();
barra de herramientas.setBackground(Color.blanco);
toolBar.setPreferredSize(nueva Dimensión(780, 48));
JPanel actionPanel = new JPanel(); //Crea un nuevo control de tipo JPanel
actionPanel.setBackground(Color.amarillo); //Establece el color de fondo
actionPanel.setPreferredSize(new Dimension(160, 380)); //Establece el tamaño
JPanel contentPanel = nuevo JPanel();
contentPanel.setBackground(Color.azul);
contentPanel.setPreferredSize(nueva Dimensión(620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main (String [] args) lanza HeadlessException {
KyodaiUI kyodaiUI = nuevo KyodaiUI();
kyodaiUI.show();
}
}
Echemos un vistazo a cómo funciona el programa anterior. En primer lugar, JFrame extendido indica que se hereda de JFrame, que es el control de contenedor de nivel superior más básico. De hecho, en el JDK, los controles que comienzan con la letra J son controles Swing. Luego configure las propiedades del contenedor. Entre ellas, setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) se usa para indicarle a la máquina virtual Java que cierre el proceso de la ventana cuando el usuario hace clic en el botón "Cerrar" en la esquina superior derecha del formulario. Si no hace esto, encontrará que aunque puede hacer clic para cerrar la ventana, el programa no sale. En el siguiente código, agregamos tres contenedores Panel al contenedor de nivel superior. Cabe señalar que en AWT podemos escribirlo directamente como add(toolBar, BorderLayout.NORTH), pero en Swing, debemos escribirlo como getContentPane() add(toolBar, BorderLayout.NORTH), de lo contrario el programa irá. equivocado.
¿Ahora puede compilarlo y ejecutarlo para ver si es el mismo que el resultado de mi ejecución (consulte la Figura 3)?
4. Frontera
Aunque usamos diferentes colores de primer plano para distinguir diferentes áreas, no hay sentido de jerarquía. Quedará mucho más hermoso con un borde.
En Java, todos los controles Swing que comienzan con J pueden usar el método setBorder para establecer límites por sí mismos. Hay muchos tipos de bordes, lineales, elevados, cóncavos y vacíos. Incluso puedes combinarlos libremente para formar tu propio estilo. Todos los bordes deben crearse utilizando los métodos estáticos proporcionados en javax.swing.BorderFactory, como por ejemplo:
Borde borde = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
nuevoColor(45, 92, 162),
nuevoColor(43, 66, 97),
nuevoColor(45, 92, 162),
nuevo color(84, 123, 200));
Ahora, cambiamos toolBar.setBackground(Color.white) a toolBar.setBorder(border). ¿Ya apareció el efecto tridimensional?
Combate práctico: escribe tu propio nombre.
Ahora tenemos una interfaz que funciona. Aunque no puede hacer nada, que no cunda el pánico.
Ahora proporcionemos un menú "Acerca de" en el área del menú para mostrar información del programa. ¿No quieres que otros sepan tu nombre? Swing en sí proporciona un JButton de control de botón listo para usar. Solo necesitamos crear un nuevo botón: JButton about = new JButton("about"); Podemos agregar el siguiente código: toolBar.add(about); Oye, ¿por qué no hay respuesta al hacer clic en el botón? Esto se debe a que no le ha dicho al programa qué hacer cuando hace clic en el botón. Para agregar una respuesta de evento a un botón, primero debe usar about.addActionListener(this) para decirle al programa que escuche los eventos cuando se presiona el botón. Dado que ActionListener es una interfaz de programa, también tenemos que hacer un poco. la declaración de la clase Modificación: clase pública KyodaiUI extiende JFrame implementa ActionListener {...} El propósito de implementar la interfaz ActionListener es decirle al programa que quiero manejar eventos. Eso sí, finalmente tenemos que añadir el código para responder al evento:
acción vacía pública realizada (ActionEvent e) {
if (e.getSource() == acerca de) {
JOptionPane.showMessageDialog(this, "Mi nombre", "Acerca de",
JOptionPane.INFORMACIÓN_MESSAGE);
devolver ;
}
}
Entre ellos, e.getSource() representa el control que actualmente desencadena el evento. Dado que a menudo hay más de un control en nuestro programa, estos controles pueden generar eventos, por lo que debemos usar este método para encontrar el control que generó el evento.
resumen
Repasemos lo que aprendimos hoy: Primero, entendemos el contenedor de nivel superior y también sabemos que los controles se dividen en controles de contenedor y controles que no son de contenedor. Finalmente, también tratamos los botones. un pequeño evento.
No hace falta decir que aprendes y practicas sobre la marcha, así que déjame dejarte una pequeña tarea para ayudarte a consolidar lo que has aprendido hoy: el botón que agregamos arriba está en el medio de la barra de menú y no es bonito. Por favor, póngalo en Pruébelo a la izquierda o a la derecha.
Finalmente, me gustaría brindarles algunos mejores materiales de referencia:
●Creación de una GUI con JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●Gráficos 2D
http://java.sun.com/docs/books/tutorial/2d/index.html
●API JDK
http://java.sun.com/j2se/1.4.2/docs/api/index.html