Swing en Java

Creación de interfaces con Java Swing

Swing es un conjunto de librerías que permiten la creación de interfaces gráficas de usuario (GUI) en Java. Swing viene incluida en el paquete JDK y es considerada una versión mejorada de la librería AWT.

Swing permite integrar y configurar un proyecto Java mediante un conjunto de elementos como pueden ser botones, cajas de texto, paneles, etc..., Los componentes de Swing son fácilmente diferenciables de otras librerías por llevar incorporada la letra J al comienzo del nombre (prefijo) del elemento, JPanel, JFrame, JButton. Además dispone de métodos que permiten configurar todos esos elementos, como pueden ser asignar un tamaño, un color, una fuente, integrar una imagen, etc...

VENTANAS

CREAR VENTANA

Para crear una ventana en Swing es necesario importar y extender la clase JFrame.

  1. package ventana2;
  2. import javax.swing.JFrame;
  3. public class Ventana2 extends JFrame {
  4. public Ventana2(){
  5. setSize(200,200);
  6. setTitle("Ventana básica");
  7. }
  8. public static void main(String[] args) {
  9. Ventana2 ventana = new Ventana2();
  10. ventana.setVisible(true);
  11. }
  12. }

CERRAR VENTANA CON EVENTOS

El cierre de la ventana se realiza mediante eventos que detectan la pulsación del botón de cierre.

  1. package ventana2;
  2. import javax.swing.JFrame;
  3. public class Ventana2 extends JFrame {
  4. public Ventana2(){
  5. setSize(400,400);
  6. setTitle("Cerrar ventana con evento");
  7. initComponents();
  8. }
  9. public void initComponents(){
  10. addWindowListener(new java.awt.event.WindowAdapter() {
  11. @Override
  12. public void windowClosing(java.awt.event.WindowEvent evento){
  13. System.exit(0);
  14. }
  15. });
  16. }
  17. public static void main(String[] args) {
  18. Ventana2 ventana = new Ventana2();
  19. ventana.setVisible(true);
  20. }
  21. }

CERRAR VENTANA CON setDefaultCloseOperation

Swing dispone del método setDefaultCloseOperation() que realiza la detección de evento automáticamente de forma sencilla. Este método permite cuatro constantes:

  • DON_NOTHING_ON_CLOSE

        No realiza ninguna acción al accionar el cierre de ventana

  • HIDE_ON_CLOSE

        Oculta la ventana pero no detiene la ejecución

  • DISPOSE_ON

        Oculta solamente una ventana pero no detiene la ejecución

  • EXIT_ON_CLOSE

        Detiene la ejecución del programa


  1. package ventana2;
  2. import javax.swing.JFrame;
  3. public class Ventana2 extends JFrame {
  4. public Ventana2(){
  5. setSize(400,400);
  6. setTitle("Cerrar ventana con evento");
  7. setDefaultCloseOperation(EXIT_ON_CLOSE);
  8. }
  9. public static void main(String[] args) {
  10. Ventana2 ventana = new Ventana2();
  11. ventana.setVisible(true);
  12. }
  13. }

CONFIGURAR VENTANA

A continuación un ejemplo de una ventana que establece la configuración de anchura y altura, el título, la activación del botón de cierre, las dimensiones mínimas y el fondo.

  1. package ventana2;
  2. import java.awt.Dimension;
  3. import javax.swing.JFrame;
  4. public class Ventana2 extends JFrame {
  5. public Ventana2(){
  6. setSize(400,400);
  7. setTitle("Cerrar ventana con evento");
  8. setDefaultCloseOperation(EXIT_ON_CLOSE);
  9. this.setMinimumSize(new Dimension(200, 200));
  10. this.getContentPane().setBackground(Color.Red);
  11. }
  12. public static void main(String[] args) {
  13. Ventana2 ventana = new Ventana2();
  14. ventana.setVisible(true);
  15. }
  16. }

CREAR PANEL

Un proyecto puede requerir más de una ventana, para ello, Swing permite crear dentro de la ventana los paneles necesarios.

  1. package ventana2;
  2. import java.awt.Color;
  3. import java.awt.Dimension;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. public class Ventana2 extends JFrame {
  7. public Ventana2(){
  8. setVentana();
  9. initComponents();
  10. }
  11. private void setVentana() {
  12. setSize(400,400);
  13. setTitle("Cerrar ventana con evento");
  14. setDefaultCloseOperation(EXIT_ON_CLOSE);
  15. this.setMinimumSize(new Dimension(200, 200));
  16. this.getContentPane().setBackground(Color.red);
  17. }
  18. private void newPanel(){
  19. JPanel panel = new JPanel();
  20. panel.setBackground(Color.ORANGE);
  21. this.getContentPane().add(panel);
  22. }
  23. private void initComponents(){
  24. newPanel();
  25. }
  26. public static void main(String[] args) {
  27. Ventana2 ventana = new Ventana2();
  28. ventana.setVisible(true);
  29. }
  30. }

LAYOUT MANAGER

Java recomienda trabajar con gestores de diseño, con ellos se puede definir el estilo a los distintos paneles, permitiendo ordenar los elementos que contiene cada panel y evitando que al dimensionar éste no se descomponga, es decir, no se altere el orden y la dimensión de dichos elementos. A continuación algunos de los diseños más recomendados y utilizados.

BORDERLAYOUT

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,200,200);
  5. this.getContentPane().add(panel,BorderLayout.CENTER);
  6. JPanel panel2 = new JPanel();
  7. panel2.setBackground(Color.red);
  8. this.getContentPane().add(panel2,BorderLayout.NORTH);
  9. JPanel panel3 = new JPanel();
  10. panel3.setBackground(Color.BLUE);
  11. this.getContentPane().add(panel3,BorderLayout.SOUTH);
  12. JPanel panel4 = new JPanel();
  13. panel4.setBackground(Color.GRAY);
  14. this.getContentPane().add(panel4,BorderLayout.EAST);
  15. JPanel panel5 = new JPanel();
  16. panel5.setBackground(Color.GREEN);
  17. this.getContentPane().add(panel5,BorderLayout.WEST);
  18. }

FLOWLAYOUT

  1. private void newPanel(){
  2. this.setLayout(new FlowLayout());
  3. JPanel panel = new JPanel();
  4. panel.setBackground(Color.ORANGE);
  5. panel.setBounds(0,0,200,200);
  6. this.getContentPane().add(panel);
  7. JPanel panel2 = new JPanel();
  8. panel2.setBackground(Color.white);
  9. this.getContentPane().add(panel2);
  10. JPanel panel3 = new JPanel();
  11. panel3.setBackground(Color.BLUE);
  12. this.getContentPane().add(panel3);
  13. JPanel panel4 = new JPanel();
  14. panel4.setBackground(Color.GRAY);
  15. this.getContentPane().add(panel4);
  16. JPanel panel5 = new JPanel();
  17. panel5.setBackground(Color.GREEN);
  18. this.getContentPane().add(panel5);
  19. }

BOXLAYOUT

  1. private void newPanel(){
  2. this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));
  3. JPanel panel = new JPanel();
  4. panel.setBackground(Color.ORANGE);
  5. panel.setBounds(0,0,200,200);
  6. this.getContentPane().add(panel);
  7. JPanel panel2 = new JPanel();
  8. panel2.setBackground(Color.white);
  9. this.getContentPane().add(panel2);
  10. JPanel panel3 = new JPanel();
  11. panel3.setBackground(Color.BLUE);
  12. this.getContentPane().add(panel3);
  13. JPanel panel4 = new JPanel();
  14. panel4.setBackground(Color.GRAY);
  15. this.getContentPane().add(panel4);
  16. JPanel panel5 = new JPanel();
  17. panel5.setBackground(Color.GREEN);
  18. this.getContentPane().add(panel5);
  19. }

LAYOUT VACÍO

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,200,200);
  5. this.getContentPane().add(panel);
  6. JPanel panel2 = new JPanel();
  7. panel2.setBackground(Color.white);
  8. panel2.setBounds(200,200,200,200);
  9. this.getContentPane().add(panel2);
  10. JPanel panel3 = new JPanel();
  11. panel3.setBackground(Color.BLUE);
  12. panel3.setBounds(0,200,200,200);
  13. this.getContentPane().add(panel3);
  14. JPanel panel4 = new JPanel();
  15. panel4.setBackground(Color.GRAY);
  16. panel4.setBounds(200,0,200,200);
  17. this.getContentPane().add(panel4);
  18. JPanel panel5 = new JPanel();
  19. panel5.setBackground(Color.GREEN);
  20. panel5.setBounds(400,400,200,200);
  21. this.getContentPane().add(panel5);
  22. }

COMPONENTES

Java trabaja con objetos, también llamados componentes . Componente es cualquier elemento de un proyecto y a su vez puede contener uno o más componentes. Por tanto, una ventana es un componente que puede contener un panel que es otro componente que a su vez puede contener un botón que es otro componente. De esta forma el proyecto mantiene una estructura y un código ordenado.

ETIQUETAS

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel();
  8. tag.setText("Etiqueta");
  9. tag.setBounds(10, 10, 100, 30);
  10. panel.add(tag);
  11. }

CONFIGURAR ETIQUETAS

Color de fuente y fondo

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel();
  8. tag.setText("Etiqueta");
  9. tag.setBounds(10, 10, 100, 30);
  10. tag.setForeground(Color.magenta);
  11. tag.setBackground(Color.BLACK);
  12. tag.setOpaque(true);
  13. panel.add(tag);
  14. }

Posición texto

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel("Etiqueta",SwingConstants.CENTER);
  8. tag.setBounds(10, 10, 100, 30);
  9. tag.setForeground(Color.magenta);
  10. tag.setBackground(Color.BLACK);
  11. tag.setOpaque(true);
  12. panel.add(tag);
  13. }

Fuentes

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel("Etiqueta",SwingConstants.CENTER);
  8. tag.setBounds(10, 10, 100, 30);
  9. tag.setForeground(Color.magenta);
  10. tag.setBackground(Color.BLACK);
  11. tag.setOpaque(true);
  12. tag.setFont(new Font("arial", Font.BOLD,20));
  13. panel.add(tag);
  14. }

Fuentes externas

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel("Etiqueta",SwingConstants.CENTER);
  8. tag.setBounds(10, 10, 200, 30);
  9. tag.setForeground(Color.magenta);
  10. tag.setBackground(Color.BLACK);
  11. tag.setOpaque(true);
  12. File myFont = new File("TheGodFather.ttf");
  13. try{
  14. Font font = Font.createFont(Font.TRUETYPE_FONT,myFont);
  15. Font sizeFont = font.deriveFont(40f);
  16. tag.setFont(sizeFont);
  17. }catch(FontFormatException ex){
  18. System.err.println("Error estableciendo fuente tipográfica");
  19. }catch (IOException ex) {
  20. System.err.println("Error I/O");
  21. }
  22. panel.add(tag);
  23. }

IMAGEN EN ETIQUETA

  1. private void newPanel(){
  2. JPanel panel = new JPanel();
  3. panel.setBackground(Color.ORANGE);
  4. panel.setBounds(0,0,600,600);
  5. panel.setLayout(null);
  6. getContentPane().add(panel);
  7. JLabel tag = new JLabel("Etiqueta",SwingConstants.CENTER);
  8. tag.setBounds(10, 10, 200, 30);
  9. tag.setForeground(Color.magenta);
  10. tag.setBackground(Color.BLACK);
  11. tag.setOpaque(true);
  12. File myFont = new File("TheGodFather.ttf");
  13. try{
  14. Font font = Font.createFont(Font.TRUETYPE_FONT,myFont);
  15. Font sizeFont = font.deriveFont(40f);
  16. tag.setFont(sizeFont);
  17. }catch(FontFormatException ex){
  18. System.err.println("Error estableciendo fuente tipográfica");
  19. }catch (IOException ex) {
  20. System.err.println("Error I/O");
  21. }
  22. panel.add(tag);
  23. //Imagen
  24. ImageIcon emoticono = new ImageIcon("emoticono.jpeg");
  25. JLabel emo = new JLabel();
  26. //emo.setIcon(emoticono);
  27. emo.setBounds(10,100,200,200);
  28. emo.setIcon(new ImageIcon(emoticono.getImage().getScaledInstance(emo.getWidth(),emo.getHeight(),Image.SCALE_SMOOTH)));
  29. panel.add(emo);
  30. }

BOTONES

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(250,280,100,50);
  4. //button.setText("Hola");
  5. panel.add(button);
  6. }
  7. private void initComponents(){
  8. addPanel();
  9. addTag();
  10. addButton();
  11. }

BOTONES CON FUENTE

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(250,280,100,50);
  4. button.setForeground(Color.BLUE);
  5. button.setFont(new Font("arial",Font.ITALIC,20));
  6. panel.add(button);
  7. }

BOTONES CON FUENTE EXTERNA

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(250,280,100,50);
  4. button.setForeground(Color.BLUE);
  5. File myFont = new File("TheGodFather.ttf");
  6. try{
  7. Font font = Font.createFont(Font.TRUETYPE_FONT,myFont);
  8. Font sizeFont = font.deriveFont(40f);
  9. button.setFont(sizeFont);
  10. }catch(FontFormatException ex){
  11. System.err.println("Error estableciendo fuente tipográfica");
  12. }catch (IOException ex) {
  13. System.err.println("Error I/O");
  14. }
  15. panel.add(button);
  16. }

FONDO DE BOTONES

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(200,260,200,80);
  4. button.setBackground(Color.magenta);
  5. panel.add(button);
  6. }

BORDE DE BOTONES

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(200,260,200,80);
  4. button.setOpaque(false);
  5. button.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
  6. button.setBackground(Color.green);
  7. panel.add(button);
  8. }

CONFIGURACIÓN DE BORDE (BISEL)

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(200,260,200,80);
  4. button.setOpaque(true);
  5. button.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,Color.yellow,Color.black));
  6. button.setBackground(Color.green);
  7. panel.add(button);
  8. }


  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(200,260,200,80);
  4. button.setOpaque(true);
  5. button.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,Color.white,Color.black,Color.GRAY,Color.BLACK));
  6. button.setBackground(Color.green);
  7. panel.add(button);
  8. }

CONFIGURACIÓN DE BORDE (LINEA)

  1. private void addButton(){
  2. button = new JButton("Hola");
  3. button.setBounds(200,260,200,80);
  4. button.setOpaque(true);
  5. button.setBorder(BorderFactory.createLineBorder(Color.gray,5, true));
  6. button.setBackground(Color.lightGray);
  7. panel.add(button);
  8. }

EVENTOS

MouseListener

MouseClicked

Detecta que el botón del ratón ha sido pulsado

MousePressed

Detecta que el botón del ratón está siendo pulsado

MouseReleased

Detecta que el botón se ha soltado, si es movido mientras está pulsado no detecta MouseClicked 

MouseEntered

Detecta el ratón sobre el área del elemento

MouseExited

Detecta el ratón fuera del  área del elemento

  1. private void actionMouse(){
  2. button.addMouseListener(new MouseListener(){
  3. @Override
  4. public void mouseClicked(MouseEvent e) {
  5. button.setBackground(Color.green);
  6. }
  7. @Override
  8. public void mousePressed(MouseEvent e) {
  9. button.setBackground(Color.red);
  10. }
  11. @Override
  12. public void mouseReleased(MouseEvent e) {
  13. button.setBackground(Color.orange);
  14. button.setText("Color naranja");
  15. }
  16. @Override
  17. public void mouseEntered(MouseEvent e) {
  18. button.setBackground(Color.black);
  19. }
  20. @Override
  21. public void mouseExited(MouseEvent e) {
  22. button.setBackground(Color.white);
  23. }
  24. });
  25. }

MouseMotionListener

MouseDragged

Detecta el movimiento del ratón pulsado sobre el área del botón.

MouseMoved

Detecta el movimiento sobre el área del botón.

  1. private void actionMouse(){
  2. button.addMouseMotionListener(new MouseMotionListener(){
  3. @Override
  4. public void mouseDragged(MouseEvent e) {
  5. button.setBackground(Color.pink);
  6. }
  7. @Override
  8. public void mouseMoved(MouseEvent e) {
  9. button.setBackground(Color.red);
  10. }
  11. });
  12. }

MouseWheelListener

MouseWheelMoved

Detecta el movimiento de la rueda del ratón.

  1. private void actionMouse(){
  2. button.addMouseWheelListener(new MouseWheelListener(){
  3. @Override
  4. public void mouseWheelMoved(MouseWheelEvent e) {
  5. button.setBackground(Color.DARK_GRAY);
  6. button.setForeground(Color.white);
  7. }
  8. });
  9. }

ActionListener

ActionPerformed

Detecta alguna acción que ocurre en algún elemento como pulsar un botón, pulsar Enter en una caja de texto o desplegar un menú.

  1. private void action(){
  2. button.addActionListener(new ActionListener(){
  3. @Override
  4. public void actionPerformed(ActionEvent e) {
  5. System.out.print(e);
  6. button.setBackground(Color.red);
  7. }
  8. });
  9. }

KeyListener

keyTyped

Detecta que una tecla ha sido pulsada, si existe la misma acción que keyPressed la sobreescribe.

keyPressed

Detecta una tecla presionada.

keyReleased

Detecta una tecla soltada.

  1. private void action(){
  2. button.addKeyListener(new KeyListener(){
  3. @Override
  4. public void keyTyped(KeyEvent e) {
  5. button.setText("click");
  6. button.setBackground(Color.white);
  7. }
  8. @Override
  9. public void keyPressed(KeyEvent e) {
  10. button.setText("tecla presionada");
  11. }
  12. @Override
  13. public void keyReleased(KeyEvent e) {
  14. button.setText("tecla soltada");
  15. }
  16. });
  17. }

Lista orientativa de componentes Swing y listeners recomendables.

Tabla Listener Swing

Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso