SlideShare una empresa de Scribd logo
7. Profundizando en Swing
             Componentes y contenedores de Swing
             Un vistazo a algunos de los más usados
             Modelos de datos
             Look & feel
             Dibujando en Java
             Hilo de Swing



Programación III                 Tema 7b - Swing
Componentes Swing (1)
   • Una buena referencia: Java Tutorials
   • Veamos algunos de los componentes más significativos
           – Controles básicos




Programación III                 Tema 7b - Swing
Componentes Swing (2)

   • Edición
     con
     formato
     específico




Programación III             Tema 7b - Swing
Componentes Swing (3)

   • Muestra de información no editable




Programación III             Tema 7b - Swing
Contenedores Swing (1)

   • Contenedores de primer nivel (top-level)




Programación III              Tema 7b - Swing
Contenedores Swing (2)

   • Propósito general y específico




Programación III              Tema 7b - Swing
Descripción de
                componentes
   • Hacemos un recorrido por algunos de los
     componentes más útiles de Swing
   • Usar cada uno requiere consultar la
     documentación para:
           –       Tipo de uso (¿es lo que necesitamos?)
           –       Modo de construirlo
           –       Modo de configurarlo
           –       Modo de utilizarlo en nuestro código
                    • Cómo consultar sus datos
                    • Cómo modificar sus datos
                    • Cómo operar con él (eventos)
Programación III                        Tema 7b - Swing
Características generales

   • Algunos métodos comunes a componentes:
           –       setVisible( bool )
           –       setEnabled( bool )
           –       getParent() - contenedor donde está
           –       isFocusOwner() - tiene el foco?
                    • transferFocus(), requestFocusInWindow()
           –       setPreferredSize( tam ), ...Minimum, ...Maximum
           –       setFont, setBackground, setForeground
           –       setTooltipText( texto )
           –       setBorder( ... ) - veamos los bordes...

Programación III                         Tema 7b - Swing
Características gen.: Borde

   • Hay varios tipos de borde
           – Generador en BorderFactory
           – Se pueden componer
   BorderFactory.createMatteBorder(
     2, 5, 2, 5, Color.green );
   BorderFactory.createBevelBorder( BevelBorder.RAISED );
   BorderFactory.createEtchedBorder();
   BorderFactory.createLineBorder( Color.red );
   BorderFactory.createLoweredBevelBorder();
   BorderFactory.createRaisedBevelBorder();
   BorderFactory.createCompoundBorder(
     BorderFactory.createTitledBorder("N. panel"),
     BorderFactory.createEmptyBorder(5,5,5,5) );

Programación III                 Tema 7b - Swing
JButton

   • Puede mostrar texto y/o imagen
   • Algunos métodos:
           – setMnemonic( KeyEvent.VK_M )
           – setActionCommand( texto ) - para el listener
                   • getActionCommand() (en el evento)
           – setDefaultButton( b ) (en el contenedor raíz)
           – doClick() (click programático)
   • Iconos configurables para estados:
           – desactivado, pulsado, rollover
   • ActionListener
Programación III                       Tema 7b - Swing
JCheckBox / JRadioButton

   • JCheckBox
           – Como un botón pero con estado
             (activado o no)
                   • setSelected( bool )
                   • getSelected()
           – ItemListener - cambio de estado
   • JRadioButton
           – Se agrupan en un ButtonGroup
                   • bg.add( rb )
           – Sólo uno está activo
           – ActionListener - cambio de botón activo
Programación III                           Tema 7b - Swing
JTextArea
           –       JTextArea( texto inicial, cols, filas )
           –       getText() - setText( String )
           –       setEditable(t/f), setTabSize(int), setLineWrap(t/f)
           –       selectAll(), getSelectionStart(), getSelectionEnd()
           –       append( String ), insert( String, pos )
                    • replaceRange( String, pos-ini, pos-fin )
                    • replaceSelection( String )
           – getLineCount()
   • DocumentListener - cambio en el texto


Programación III                           Tema 7b - Swing
Texto con formato/estilo

   • JFormattedTextField
           – Cuadros de texto
           – Estilo fijo (patrones)
   • Dos comps. similares
           – JEditorPane
                   • Muestra texto HTML
                   • También RTF
           – JTextPane
                   • Permite estilos
                   • Integra imágenes
                      – Sin necesidad de formato HTML o RTF
Programación III                          Tema 7b - Swing
JComboBox

   • Dos modos de uso:
           – Sin edición
           – Con edición (línea)
   • Se despliega
           – Al construir se le pasan los datos a elegir
           – Algunos métodos:
                   • setEditable( true/false )
                   • setSelectedIndex( num. elemento ) - ...Item
                   • getSelectedItem() - ...Index()
           – ActionListener - selección (<Enter> en editable)
           – ItemListener - cambio de selección
Programación III                         Tema 7b - Swing
JList

   • Sólo de consulta/selección
           – Presentan elementos para elegir
           – Selección simple o múltiple
           – Algunos métodos:
                   • setLayoutOrientation - una o varias columnas
                   • setSelectionMode - modo de selección
                   • setSelectedItem( ... ) - ...Index - ...Indices
                   • getSelectedIndices() - ...Value() - ...Values()
                   • ensureIndexIsVisible( ... )
                   • isSelectionEmpty(), clearSelection()
           – ListSelectionListener
Programación III                          Tema 7b - Swing
JSpinner

   • Como un combo sin desplegar
   • Modelos de datos por defecto:
           – Lista de valores
           – Rango de números
           – Fechas
   • ChangeListener - cambio de valor




Programación III                Tema 7b - Swing
JTable

   • Componente complejo
           –       muy potente
           –       Filas y columnas
           –       Celdas configurables en visualización y edición
           –       Anchuras de columnas configurables
           –       Selección de celda, rangos o filas/columnas
           –       Permite ordenación, filtrado y búsqueda
           –       Usa un modelo de datos de tabla
   • TableModelListener - cambio de datos

Programación III                       Tema 7b - Swing
Modelos de datos (1)

   • Muchos de los componentes Swing utilizan
     modelos de datos:
           – JComboBox, JList, JSpinner, JTable...
   • Se crea un modelo, por defecto o partiendo
     de una EEDD existente
           – new DefaultListModel()
   • Se puede modificar el modelo si procede
           – setModel( modelo )



Programación III                  Tema 7b - Swing
Modelos de datos (2)

   • Se puede manipular para cambiar los datos
           – modelo.addElement( elemento )
           – modelo.remove( índice )
   • Se pueden crear modelos ad-hoc
     extendiendo y redefiniendo métodos
           – TableModel
                   • getValueAt( fila, columna )
                   • setValueAt( objeto, fila, columna )
                   • isCellEditable( fila, columna )
                   • ...

Programación III                         Tema 7b - Swing
Otros componentes

   • JProgressBar
           – Indica el progreso de alguna tarea
                   • new JProgressBar( min, max )
                   • setValue( val )
                   • setStringPainted( true/false ) - muestra %
                   • setIndeterminate( true/false )
   • JSpinner
           – Entrada de valor numérico
             entre un mínimo y máximo dados
           – ChangeListener - cambio de valor

Programación III                          Tema 7b - Swing
Personalización de comps.

   • La mayor parte de los componentes se
     pueden personalizar para comportarse
     diferente
           – Lo que visualizan - Renderer. Ej:
                   JComboBox cb = new JComboBox( misDatos );
                   ...
                   ComboBoxRenderer renderer = new ComboBoxRenderer();
                   petList.setRenderer(cb);

           – Cómo son editadas - Editor. Ej:
                   table.setDefaultEditor( Integer.class,
                                  new IntegerEditor(0, 100));




Programación III                           Tema 7b - Swing
Menús

   • Java permite menús desplegables
   JMenuBar menuBar = new JMenuBar();
   JMenu menu = new JMenu("A Menu");
     menu.setMnemonic(KeyEvent.VK_A);
     menuBar.add(menu);
   JMenuItem menuItem = new JMenuItem(
       "A text-only menu item", KeyEvent.VK_T);
     menuItem.setAccelerator( KeyStroke.getKeyStroke(
       KeyEvent.VK_1, ActionEvent.ALT_MASK ));
     menu.add(menuItem);
   menuItem = new JMenuItem("Both text and icon",
       new ImageIcon("images/middle.gif"));
     menuItem.setMnemonic(KeyEvent.VK_B);
     menu.add(menuItem);
Programación III            Tema 7b - Swing
Menús (2)
   menuItem = new JMenuItem(
        new ImageIcon("images/middle.gif"));
        menu.add(menuItem);
   menu.addSeparator();
        ButtonGroup group = new ButtonGroup();
        rbMenuItem = new JRadioButtonMenuItem(
              "A radio button menu item" );
              rbMenuItem.setSelected(true);
              group.add(rbMenuItem);
              menu.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Another
         one");
              group.add(rbMenuItem);
              menu.add(rbMenuItem);
   ...
   vent.setJMenuBar(menuBar); 7b - Swing
Programación III                    Tema
Menús (3)

   • Los eventos son ActionEvent
           – Se chequean como los botones
           – ItemEvent si es una opción de checkbox

         menuItem.addActionListener(this);
         ...
         public void actionPerformed(ActionEvent e) {
           if (e.getAction().equals( ... ))
             ...
           else if (e == menuItemXXX)
             ...
         }


Programación III                Tema 7b - Swing
Descripción de
               contenedores
   • Comentamos ahora algunos de los
     contenedores más significativos
           – JScrollPane
                   • Permite scroll sobre un componente
                     más grande que el área disponible
                   • Configurable horizontal / vertical
                   • Vale para texto y para imágenes
                   • Se construye con el componente
                   • Típico en JTextArea, JList, JTree, JTable...

   JScrollPane areaScrollPane = new JScrollPane( textArea );
   areaScrollPane.setVerticalScrollBarPolicy(
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Programación III                          Tema 7b - Swing
Combinando varios paneles

   • JSplitPane
           – Panel móvil entre dos
                   • horizontal o vertical
                   • % mínimo o máximo
   • JTabbedPane
           – "n" paneles, uno visible
           – Pestañas para cada uno
   • JToolBar
           – Horizontal o vertical
           – "Draggable"
Programación III                         Tema 7b - Swing
Contenedores de primer
                  nivel
   • JFrame
           – La ventana que conocemos. Proceso adecuado:
                   JFrame frame = new JFrame("ventana"); // Crearla
                   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                          // Operación a hacer en cierre
                          // Mejor DISPOSE_ON_CLOSE (sólo cierra esta v)
                   frame.getContentPane().add( ... ); // Añadir comp
                      ...
                   frame.pack(); // Ajustar a tamaño adecuado
                          // Alternativa: setSize( ... );
                   frame.setLocationRelativeTo(null);
                          // Posiciona en pantalla (centra)
                   frame.setVisible(true); // Mostrarla
                   ...
                   frame.dispose(); // La finaliza por programa
Programación III                        Tema 7b - Swing
JDialog / JOptionPane

   • Ventana dependiente de un JFrame
           – Si es modal, bloquea el resto de ventanas
           – Hay una utilidad ya creada en Java:
                   JOptionPane.showMessageDialog(
                      framePrincipal,
                      "Fichero guardado.");
           – También eligiendo:
                   Object[]ops = {"Sí","No","Cancelar" };
                   JOptionPane.showOptionDialog( f,
                      "¿Confirmar?", "Borrado",
                      JOptionPane.YES_NO_CANCEL_OPTION,
                      JOptionPane.QUESTION_MESSAGE, null,
                      ops, ops[0]);
Programación III                      Tema 7b - Swing
JOptionPane (2)

   • Hay cuatro métodos principales:
           – showMessageDialog - sólo mensaje
           – showConfirmDialog - mensaje con
             confirmación, usando botones
           – showInputDialog - pide información, texto o
             lista de opciones
           – showOptionDialog - los tres unidos
   • showInternal... - para internalFrames



Programación III               Tema 7b - Swing
Internal Frames

   • Si queremos una sola ventana principal
           – Con el resto de ventanas incluidas en ella
           – Solución: JInternalFrame
                   • Panel principal: JDesktopPane
                       desktop = new JDesktopPane();
                       setContentPane(desktop);
                   • Ventanas subordinadas
                       JInternalFrame v = new JInternalFrame();
                         v.setSize( 200, 150 );
                         v.setLocation( 50, 50 );
                         v.setVisible(true);
                       desktop.add( v );
                       v.setSelected(true);
Programación III                       Tema 7b - Swing
Contenedores con capas

   • Paneles con dimensión Z
           – Información de profundidad
           – Transparencia opcional
   • JLayeredPane - capa inferior
           – Se añaden con un Integer
                   • profundidad (> - al frente)
   panelCapas.add( comp1, new Integer(1));
   panelCapas.add( comp2, new Integer(2));
   ...
   panelCapas.setLayer(comp,prof,posicion); // 2 niveles
   panelCapas.moveToFront( comp );
   panelCapas.moveToBack( comp );
Programación III                         Tema 7b - Swing
Orden de pans.
               contenedores
   • JRootPane - fondo
           – Panel con capas si existe
           – Panel de contenido (el normal de ventanas)
           – Panel cristal (por omisión oculto)
                   • Se ve por encima del resto / transparente
                   • Pero sí intercepta los eventos de ratón si está activado




Programación III                          Tema 7b - Swing
Look & Feel
           – Java permite configurar el L&F
                   • UIManager.setLookAndFeel( nombre clase );
           – Clases de l&F:
                   •   UIManager.getSystemLookAndFeelClassName()
                   •   "javax.swing.plaf.metal.MetalLookAndFeel"
                   •   "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
                   •   "com.sun.java.swing.plaf.motif.MotifLookAndFeel"
                   •   "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
           – También una vez iniciadas las ventanas:
                   • SwingUtilities.updateComponentTreeUI( ventana );
                   • ventana.pack();
           – Se puede tb por línea de comandos
           – Se pueden crear l&f personalizados
Programación III                            Tema 7b - Swing
Ejemplo

   • SwingSet2
           – Incluido en demos de JDK (demos/jfc)
           – Muestra muchas de las posibilidades de Swing
   • SwingSet3 en evolución (Web)
           – Nuevo L&F de Java 10: Nimbus




Programación III                Tema 7b - Swing
Dibujo en Swing: a su
                    manera
   • Swing dibuja los componentes según layout
           – Con layout nulo podemos ponerlos nosotros
                   • setLocation( x, y )
                   • setBounds( new Rectangle( ancho, alto ) )
           – Al ir moviendo el componente Swing lo redibuja
                   • Pueden solaparse (swing dibuja en orden de add)
                      – El add puede hacerse indicando posición
                      – Mejor usar LayeredPane si la profundidad es importante

   • Ejemplo: EjemploJuego.java


Programación III                           Tema 7b - Swing
Dibujo en Swing a nuestra
                  manera (1)
   • Swing hace lo siguiente para "pintar" la
     ventana con todos sus componentes:
           – Llama al método paint(Graphics g)
                   • Este llama al paint(g) de todos sus componentes
           – Cada paint de un componente hace 3 pasos:
                   • paintComponent(g)
                   • paintBorder(g)
                   • paintChildren(g)
           – El método a sobreescribir:
             paintComponent(g)
                   • Debe llamar a super.paintComponent(g)
                      – Esto incluye el pintado del fondo
Programación III                            Tema 7b - Swing
Dibujo en Swing a nuestra
                 manera (2)
   • ¿Cuándo "pinta" Swing?
           – Cuando lo necesita
                   • Al redimensionar la ventana
                   • Al mostrarse/ocultarse componentes
                   • Al cambiar valores de componentes (p ej setLocation)
           – Cuando el programador quiera
                   • Llamando a repaint() - redibuja todo
                   • Llamando a repaint( x,y,ancho,alto ) - redibuja parte
                   • Swing "guarda" la llamada y pinta en cuanto puede
   Ejemplo: PruebaDibujadoSwing
                   (cambio paintComponent(g))
Programación III                         Tema 7b - Swing
Otros aspectos

   • java.awt.Desktop
           –       browse(URI uri) - navegador asociado en el SO
           –       edit(File file) - editor asociado en el SO
           –       mail(URI mailtoURI) - lanza clte email definido
           –       open(File file) - aplicación asociada en el SO
           –       print(File file) - impresión nativa en el SO
   • Área de notificación (System Tray)
           – java.awt.SystemTray - add(TrayIcon)



Programación III                      Tema 7b - Swing
Swing e hilos

   • SwingUtilities.invokeLater( Runnable )
           – "hazlo cuando puedas"
                   public static void main(String[] args) {
                       SwingUtilities.invokeLater( new Runnable() {
                           public void run() {
                               createAndShowGUI();
                           }
                       });
                   }




Programación III                      Tema 7b - Swing

Más contenido relacionado

PDF
Programacion swing
PDF
Programacion en JAVA 2
PDF
10.Polimorfismo Java
PPTX
Confección de interfaces de usuario con JAVA - SWING
PDF
Java
PPT
Polimorfismo en Java
PPTX
Principales características de windows
PDF
Unidad 01 Tema 01 2022 LPI (1891).pdf
Programacion swing
Programacion en JAVA 2
10.Polimorfismo Java
Confección de interfaces de usuario con JAVA - SWING
Java
Polimorfismo en Java
Principales características de windows
Unidad 01 Tema 01 2022 LPI (1891).pdf

Similar a Programación III (Java) - 07b Swing (20)

PDF
Hibernate - JPA @luce
ODP
T5_Vb_Bd
PDF
Controles de Interfaz Introduccion.pdf
PPTX
Sesion uno azuay
PPT
Programación III (Java) - 01 Introduccion
PDF
Java ME - Fechas y datos
PDF
Curso android studio
PDF
Manual de android
PDF
Curso android studio
PPTX
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
PDF
Look and feel java
PPTX
Cubos ppt
PDF
03. Introduccion a JavaScript y JQuery
ODP
Ajax: CSLA-- e integración con BBDD
PDF
Pds0 a introducción al matlab
PPTX
Rubik Cube Timer - Diapositivas presentacion Clases
DOCX
Actividades iniciales
PPTX
PHP_Mysql.pptx
PPTX
Etiquetas básicas jsf
PDF
04 practica lenguaje programacion - componentes
Hibernate - JPA @luce
T5_Vb_Bd
Controles de Interfaz Introduccion.pdf
Sesion uno azuay
Programación III (Java) - 01 Introduccion
Java ME - Fechas y datos
Curso android studio
Manual de android
Curso android studio
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Look and feel java
Cubos ppt
03. Introduccion a JavaScript y JQuery
Ajax: CSLA-- e integración con BBDD
Pds0 a introducción al matlab
Rubik Cube Timer - Diapositivas presentacion Clases
Actividades iniciales
PHP_Mysql.pptx
Etiquetas básicas jsf
04 practica lenguaje programacion - componentes
Publicidad

Más de Andoni Eguíluz Morán (20)

PDF
Cebek oficina fija oficina movil 2 - 201611
PDF
Cebek - oficina fija oficina movil 1 - 201610
PPTX
El papel de las tic en la construccióLa integración de recursos didácticos di...
PPTX
Falta de profesionales tecnológicos.Cómo lo abordamos
PDF
Cebek oficina fija oficina movil 2 - 201512
PDF
Cebek - Oficina fija oficina movil 1 - 201512
PDF
Uso seguro de las TIC en el mundo educativo
PPTX
Uso ético y seguro de las TIC
PPTX
Redes Sociales Educativas
PDF
CCD2015 - Creación contenidos digitales
PDF
Cebek - Medidas basicas de seguridad - 201504
PPTX
CYPED 2015 - Comunicación y Participación en Entornos Digitales
PDF
Cebek - jornada identidad digital corporativa
PPTX
Gamificación, serious games y negocio (SGGN-1409)
PPTX
SGGN 20140605
PPT
Programación III (Java) - 09 Cierre
PPT
Programación III (Java) - 08 threads
PPT
Programación III (Java) - 07 Eventos
PPT
Programación III (Java) - 06 Ventanas
PPT
Programación III (Java) - 05 Genericos y Colecciones - java6-7
Cebek oficina fija oficina movil 2 - 201611
Cebek - oficina fija oficina movil 1 - 201610
El papel de las tic en la construccióLa integración de recursos didácticos di...
Falta de profesionales tecnológicos.Cómo lo abordamos
Cebek oficina fija oficina movil 2 - 201512
Cebek - Oficina fija oficina movil 1 - 201512
Uso seguro de las TIC en el mundo educativo
Uso ético y seguro de las TIC
Redes Sociales Educativas
CCD2015 - Creación contenidos digitales
Cebek - Medidas basicas de seguridad - 201504
CYPED 2015 - Comunicación y Participación en Entornos Digitales
Cebek - jornada identidad digital corporativa
Gamificación, serious games y negocio (SGGN-1409)
SGGN 20140605
Programación III (Java) - 09 Cierre
Programación III (Java) - 08 threads
Programación III (Java) - 07 Eventos
Programación III (Java) - 06 Ventanas
Programación III (Java) - 05 Genericos y Colecciones - java6-7
Publicidad

Último (20)

PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PPTX
Doctrina 1 Soteriologuia y sus diferente
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Metodologías Activas con herramientas IAG
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
Tomo 1 de biologia gratis ultra plusenmas
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Doctrina 1 Soteriologuia y sus diferente
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Metodologías Activas con herramientas IAG
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
1. Intrdoduccion y criterios de seleccion de Farm 2024.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL

Programación III (Java) - 07b Swing

  • 1. 7. Profundizando en Swing Componentes y contenedores de Swing Un vistazo a algunos de los más usados Modelos de datos Look & feel Dibujando en Java Hilo de Swing Programación III Tema 7b - Swing
  • 2. Componentes Swing (1) • Una buena referencia: Java Tutorials • Veamos algunos de los componentes más significativos – Controles básicos Programación III Tema 7b - Swing
  • 3. Componentes Swing (2) • Edición con formato específico Programación III Tema 7b - Swing
  • 4. Componentes Swing (3) • Muestra de información no editable Programación III Tema 7b - Swing
  • 5. Contenedores Swing (1) • Contenedores de primer nivel (top-level) Programación III Tema 7b - Swing
  • 6. Contenedores Swing (2) • Propósito general y específico Programación III Tema 7b - Swing
  • 7. Descripción de componentes • Hacemos un recorrido por algunos de los componentes más útiles de Swing • Usar cada uno requiere consultar la documentación para: – Tipo de uso (¿es lo que necesitamos?) – Modo de construirlo – Modo de configurarlo – Modo de utilizarlo en nuestro código • Cómo consultar sus datos • Cómo modificar sus datos • Cómo operar con él (eventos) Programación III Tema 7b - Swing
  • 8. Características generales • Algunos métodos comunes a componentes: – setVisible( bool ) – setEnabled( bool ) – getParent() - contenedor donde está – isFocusOwner() - tiene el foco? • transferFocus(), requestFocusInWindow() – setPreferredSize( tam ), ...Minimum, ...Maximum – setFont, setBackground, setForeground – setTooltipText( texto ) – setBorder( ... ) - veamos los bordes... Programación III Tema 7b - Swing
  • 9. Características gen.: Borde • Hay varios tipos de borde – Generador en BorderFactory – Se pueden componer BorderFactory.createMatteBorder( 2, 5, 2, 5, Color.green ); BorderFactory.createBevelBorder( BevelBorder.RAISED ); BorderFactory.createEtchedBorder(); BorderFactory.createLineBorder( Color.red ); BorderFactory.createLoweredBevelBorder(); BorderFactory.createRaisedBevelBorder(); BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("N. panel"), BorderFactory.createEmptyBorder(5,5,5,5) ); Programación III Tema 7b - Swing
  • 10. JButton • Puede mostrar texto y/o imagen • Algunos métodos: – setMnemonic( KeyEvent.VK_M ) – setActionCommand( texto ) - para el listener • getActionCommand() (en el evento) – setDefaultButton( b ) (en el contenedor raíz) – doClick() (click programático) • Iconos configurables para estados: – desactivado, pulsado, rollover • ActionListener Programación III Tema 7b - Swing
  • 11. JCheckBox / JRadioButton • JCheckBox – Como un botón pero con estado (activado o no) • setSelected( bool ) • getSelected() – ItemListener - cambio de estado • JRadioButton – Se agrupan en un ButtonGroup • bg.add( rb ) – Sólo uno está activo – ActionListener - cambio de botón activo Programación III Tema 7b - Swing
  • 12. JTextArea – JTextArea( texto inicial, cols, filas ) – getText() - setText( String ) – setEditable(t/f), setTabSize(int), setLineWrap(t/f) – selectAll(), getSelectionStart(), getSelectionEnd() – append( String ), insert( String, pos ) • replaceRange( String, pos-ini, pos-fin ) • replaceSelection( String ) – getLineCount() • DocumentListener - cambio en el texto Programación III Tema 7b - Swing
  • 13. Texto con formato/estilo • JFormattedTextField – Cuadros de texto – Estilo fijo (patrones) • Dos comps. similares – JEditorPane • Muestra texto HTML • También RTF – JTextPane • Permite estilos • Integra imágenes – Sin necesidad de formato HTML o RTF Programación III Tema 7b - Swing
  • 14. JComboBox • Dos modos de uso: – Sin edición – Con edición (línea) • Se despliega – Al construir se le pasan los datos a elegir – Algunos métodos: • setEditable( true/false ) • setSelectedIndex( num. elemento ) - ...Item • getSelectedItem() - ...Index() – ActionListener - selección (<Enter> en editable) – ItemListener - cambio de selección Programación III Tema 7b - Swing
  • 15. JList • Sólo de consulta/selección – Presentan elementos para elegir – Selección simple o múltiple – Algunos métodos: • setLayoutOrientation - una o varias columnas • setSelectionMode - modo de selección • setSelectedItem( ... ) - ...Index - ...Indices • getSelectedIndices() - ...Value() - ...Values() • ensureIndexIsVisible( ... ) • isSelectionEmpty(), clearSelection() – ListSelectionListener Programación III Tema 7b - Swing
  • 16. JSpinner • Como un combo sin desplegar • Modelos de datos por defecto: – Lista de valores – Rango de números – Fechas • ChangeListener - cambio de valor Programación III Tema 7b - Swing
  • 17. JTable • Componente complejo – muy potente – Filas y columnas – Celdas configurables en visualización y edición – Anchuras de columnas configurables – Selección de celda, rangos o filas/columnas – Permite ordenación, filtrado y búsqueda – Usa un modelo de datos de tabla • TableModelListener - cambio de datos Programación III Tema 7b - Swing
  • 18. Modelos de datos (1) • Muchos de los componentes Swing utilizan modelos de datos: – JComboBox, JList, JSpinner, JTable... • Se crea un modelo, por defecto o partiendo de una EEDD existente – new DefaultListModel() • Se puede modificar el modelo si procede – setModel( modelo ) Programación III Tema 7b - Swing
  • 19. Modelos de datos (2) • Se puede manipular para cambiar los datos – modelo.addElement( elemento ) – modelo.remove( índice ) • Se pueden crear modelos ad-hoc extendiendo y redefiniendo métodos – TableModel • getValueAt( fila, columna ) • setValueAt( objeto, fila, columna ) • isCellEditable( fila, columna ) • ... Programación III Tema 7b - Swing
  • 20. Otros componentes • JProgressBar – Indica el progreso de alguna tarea • new JProgressBar( min, max ) • setValue( val ) • setStringPainted( true/false ) - muestra % • setIndeterminate( true/false ) • JSpinner – Entrada de valor numérico entre un mínimo y máximo dados – ChangeListener - cambio de valor Programación III Tema 7b - Swing
  • 21. Personalización de comps. • La mayor parte de los componentes se pueden personalizar para comportarse diferente – Lo que visualizan - Renderer. Ej: JComboBox cb = new JComboBox( misDatos ); ... ComboBoxRenderer renderer = new ComboBoxRenderer(); petList.setRenderer(cb); – Cómo son editadas - Editor. Ej: table.setDefaultEditor( Integer.class, new IntegerEditor(0, 100)); Programación III Tema 7b - Swing
  • 22. Menús • Java permite menús desplegables JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("A Menu"); menu.setMnemonic(KeyEvent.VK_A); menuBar.add(menu); JMenuItem menuItem = new JMenuItem( "A text-only menu item", KeyEvent.VK_T); menuItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_1, ActionEvent.ALT_MASK )); menu.add(menuItem); menuItem = new JMenuItem("Both text and icon", new ImageIcon("images/middle.gif")); menuItem.setMnemonic(KeyEvent.VK_B); menu.add(menuItem); Programación III Tema 7b - Swing
  • 23. Menús (2) menuItem = new JMenuItem( new ImageIcon("images/middle.gif")); menu.add(menuItem); menu.addSeparator(); ButtonGroup group = new ButtonGroup(); rbMenuItem = new JRadioButtonMenuItem( "A radio button menu item" ); rbMenuItem.setSelected(true); group.add(rbMenuItem); menu.add(rbMenuItem); rbMenuItem = new JRadioButtonMenuItem("Another one"); group.add(rbMenuItem); menu.add(rbMenuItem); ... vent.setJMenuBar(menuBar); 7b - Swing Programación III Tema
  • 24. Menús (3) • Los eventos son ActionEvent – Se chequean como los botones – ItemEvent si es una opción de checkbox menuItem.addActionListener(this); ... public void actionPerformed(ActionEvent e) { if (e.getAction().equals( ... )) ... else if (e == menuItemXXX) ... } Programación III Tema 7b - Swing
  • 25. Descripción de contenedores • Comentamos ahora algunos de los contenedores más significativos – JScrollPane • Permite scroll sobre un componente más grande que el área disponible • Configurable horizontal / vertical • Vale para texto y para imágenes • Se construye con el componente • Típico en JTextArea, JList, JTree, JTable... JScrollPane areaScrollPane = new JScrollPane( textArea ); areaScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); Programación III Tema 7b - Swing
  • 26. Combinando varios paneles • JSplitPane – Panel móvil entre dos • horizontal o vertical • % mínimo o máximo • JTabbedPane – "n" paneles, uno visible – Pestañas para cada uno • JToolBar – Horizontal o vertical – "Draggable" Programación III Tema 7b - Swing
  • 27. Contenedores de primer nivel • JFrame – La ventana que conocemos. Proceso adecuado: JFrame frame = new JFrame("ventana"); // Crearla frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Operación a hacer en cierre // Mejor DISPOSE_ON_CLOSE (sólo cierra esta v) frame.getContentPane().add( ... ); // Añadir comp ... frame.pack(); // Ajustar a tamaño adecuado // Alternativa: setSize( ... ); frame.setLocationRelativeTo(null); // Posiciona en pantalla (centra) frame.setVisible(true); // Mostrarla ... frame.dispose(); // La finaliza por programa Programación III Tema 7b - Swing
  • 28. JDialog / JOptionPane • Ventana dependiente de un JFrame – Si es modal, bloquea el resto de ventanas – Hay una utilidad ya creada en Java: JOptionPane.showMessageDialog( framePrincipal, "Fichero guardado."); – También eligiendo: Object[]ops = {"Sí","No","Cancelar" }; JOptionPane.showOptionDialog( f, "¿Confirmar?", "Borrado", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, ops, ops[0]); Programación III Tema 7b - Swing
  • 29. JOptionPane (2) • Hay cuatro métodos principales: – showMessageDialog - sólo mensaje – showConfirmDialog - mensaje con confirmación, usando botones – showInputDialog - pide información, texto o lista de opciones – showOptionDialog - los tres unidos • showInternal... - para internalFrames Programación III Tema 7b - Swing
  • 30. Internal Frames • Si queremos una sola ventana principal – Con el resto de ventanas incluidas en ella – Solución: JInternalFrame • Panel principal: JDesktopPane desktop = new JDesktopPane(); setContentPane(desktop); • Ventanas subordinadas JInternalFrame v = new JInternalFrame(); v.setSize( 200, 150 ); v.setLocation( 50, 50 ); v.setVisible(true); desktop.add( v ); v.setSelected(true); Programación III Tema 7b - Swing
  • 31. Contenedores con capas • Paneles con dimensión Z – Información de profundidad – Transparencia opcional • JLayeredPane - capa inferior – Se añaden con un Integer • profundidad (> - al frente) panelCapas.add( comp1, new Integer(1)); panelCapas.add( comp2, new Integer(2)); ... panelCapas.setLayer(comp,prof,posicion); // 2 niveles panelCapas.moveToFront( comp ); panelCapas.moveToBack( comp ); Programación III Tema 7b - Swing
  • 32. Orden de pans. contenedores • JRootPane - fondo – Panel con capas si existe – Panel de contenido (el normal de ventanas) – Panel cristal (por omisión oculto) • Se ve por encima del resto / transparente • Pero sí intercepta los eventos de ratón si está activado Programación III Tema 7b - Swing
  • 33. Look & Feel – Java permite configurar el L&F • UIManager.setLookAndFeel( nombre clase ); – Clases de l&F: • UIManager.getSystemLookAndFeelClassName() • "javax.swing.plaf.metal.MetalLookAndFeel" • "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" • "com.sun.java.swing.plaf.motif.MotifLookAndFeel" • "com.sun.java.swing.plaf.gtk.GTKLookAndFeel" – También una vez iniciadas las ventanas: • SwingUtilities.updateComponentTreeUI( ventana ); • ventana.pack(); – Se puede tb por línea de comandos – Se pueden crear l&f personalizados Programación III Tema 7b - Swing
  • 34. Ejemplo • SwingSet2 – Incluido en demos de JDK (demos/jfc) – Muestra muchas de las posibilidades de Swing • SwingSet3 en evolución (Web) – Nuevo L&F de Java 10: Nimbus Programación III Tema 7b - Swing
  • 35. Dibujo en Swing: a su manera • Swing dibuja los componentes según layout – Con layout nulo podemos ponerlos nosotros • setLocation( x, y ) • setBounds( new Rectangle( ancho, alto ) ) – Al ir moviendo el componente Swing lo redibuja • Pueden solaparse (swing dibuja en orden de add) – El add puede hacerse indicando posición – Mejor usar LayeredPane si la profundidad es importante • Ejemplo: EjemploJuego.java Programación III Tema 7b - Swing
  • 36. Dibujo en Swing a nuestra manera (1) • Swing hace lo siguiente para "pintar" la ventana con todos sus componentes: – Llama al método paint(Graphics g) • Este llama al paint(g) de todos sus componentes – Cada paint de un componente hace 3 pasos: • paintComponent(g) • paintBorder(g) • paintChildren(g) – El método a sobreescribir: paintComponent(g) • Debe llamar a super.paintComponent(g) – Esto incluye el pintado del fondo Programación III Tema 7b - Swing
  • 37. Dibujo en Swing a nuestra manera (2) • ¿Cuándo "pinta" Swing? – Cuando lo necesita • Al redimensionar la ventana • Al mostrarse/ocultarse componentes • Al cambiar valores de componentes (p ej setLocation) – Cuando el programador quiera • Llamando a repaint() - redibuja todo • Llamando a repaint( x,y,ancho,alto ) - redibuja parte • Swing "guarda" la llamada y pinta en cuanto puede Ejemplo: PruebaDibujadoSwing (cambio paintComponent(g)) Programación III Tema 7b - Swing
  • 38. Otros aspectos • java.awt.Desktop – browse(URI uri) - navegador asociado en el SO – edit(File file) - editor asociado en el SO – mail(URI mailtoURI) - lanza clte email definido – open(File file) - aplicación asociada en el SO – print(File file) - impresión nativa en el SO • Área de notificación (System Tray) – java.awt.SystemTray - add(TrayIcon) Programación III Tema 7b - Swing
  • 39. Swing e hilos • SwingUtilities.invokeLater( Runnable ) – "hazlo cuando puedas" public static void main(String[] args) { SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } }); } Programación III Tema 7b - Swing