programación gráfica
DESCRIPTION
Programación gráfica. Diseño de la interfaz gráfica ( javax.swing ) Contenedores Componentes Modelo de eventos Diseño de aplicaciones Modelo MVC (Modelo-Vista-Control). Interfaz gráfica de usuario. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/1.jpg)
El lenguaje de programación Java 1
• Diseño de la interfaz gráfica (javax.swing)– Contenedores– Componentes
• Modelo de eventos
• Diseño de aplicaciones– Modelo MVC (Modelo-Vista-Control)
Programación gráfica
![Page 2: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/2.jpg)
El lenguaje de programación Java 2
Interfaz gráfica de usuario• El interfaz de usuario es la parte del programa que permite a éste
interactuar con el usuario.
• AWT (Abstract Window Toolkit) biblioteca de clases Java para el
desarrollo de Interfaces de Usuario Gráficas.
• La estructura básica del AWT se basa en Componentes y
Contenedores
– Los Contenedores contienen Componentes, que son los controles básicos
– todos los Componentes clase Component o uno de sus subtipos.
– los Contenedores son instancias de la clase Container o uno de sus
subtipos.
• No se usan posiciones fijas de los Componentes, sino que están
situados a través de una disposición controlada (Layouts)
![Page 3: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/3.jpg)
Interfaz gráfica de usuario. AWT
Button
Component
Checkbox
Canvas
Choice
Label
List
ScrollBar
Panel
Container
WindowScrollPane
Dialog
FileDialog
TextArea
TextComponent
TextField
MenuComponent
MenuItemMenuBar
CheckBoxMenuItem Menu
PopupMenu
Frame
![Page 4: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/4.jpg)
El lenguaje de programación Java 4
Swing-JFC (Java Foundation Classes)• Extensión de AWT mejora la cosmética de las GUI’s.
•La apariencia de la aplicación se adapta al sistema operativo
y plataforma donde se está ejecutando.
•Garantizan que el aspecto es el mismo aunque se cambie de
plataforma.
−Look and Feel: Metal, Window, Motif
•La aplicación se puede utilizar sin ratón sin añadir código
•Las clases se llaman igual que las del paquete java.awt
pero con una J delante, esto es, JFrame, JButton, ...
![Page 5: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/5.jpg)
El lenguaje de programación Java 5
• Swing Containers: JPanel, JTabbedPane,
JScrollPane, JSplitPane,
JMenuBar, JPopupMenu, JToolBar
• Swing Components: JButton, JRadioButton, JChechBox,
JLabel, JTextArea,
JTextField, JPasswordField,
JComboBox, JList, JTree, JTable
![Page 6: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/6.jpg)
El lenguaje de programación Java 6
JFrame
• paquete javax.swing
• Por defecto se crea con tamaño 0x0– setSize(ancho, alto)
• Hay que indicar qué ocurrirá cuando el usuario cierre la ventana– setDefaultCloseOperation(cte)– cte = EXIT_ON_CLOSE/DO_NOTHING_ON_CLOSE/HIDE_ON_CLOSE/ DISPOSE_ON_CLOSE
• Al crear un frame no se visualiza automáticamente– setVisible(true)
• Para situar un frame en la ventana:– setLocation(x,y) //(x,y) es la esquina superior-izda
– setBounds(x, y, ancho, alto)
![Page 7: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/7.jpg)
El lenguaje de programación Java 7
Toolkit
• Permite obtener información dependiente del sistema.
• Ejemplo: Permite obtener las dimensiones de la pantalla para poder calcular el tamaño óptimo del tamaño de las ventanas de la aplicación.
class FrameCentrado extends JFrame{ public FrameCentrado() {
try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception {
//siguiente transparencia}
}
![Page 8: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/8.jpg)
El lenguaje de programación Java 8
clase FrameCentrado (continuación)
private void jbInit() throws Exception {//obtener las dimensiones de la pantalla
Toolkit kit = Toolkit.getDefaultToolkit();Dimension tamañoVtna = kit.getScreenSize();int alto = tamañoVtna.height;int ancho = tamañoVtna.width;
//centrar la ventana en la pantalla
this.setSize(ancho/2, alto/2);setLocation(ancho/4, alto/4);
//Establecer título e icono
Image img = kit.getImage(“icon.gif”); //gif y jpegsetIconImage(img);setTitle(“Frame centrado”);
}
![Page 9: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/9.jpg)
El lenguaje de programación Java 9
• No se añaden directamente los componentes a un frame sino a un panel de contenido.
this.getContentPane().add(…);
• Los componentes en un contenedor se gestionan por un layout manager:
– FlowLayout: Alinea los componentes horizontalmente.• opción por defecto en JPanel• dentro de una fila se puede elegir la alineación (LEFT, RIGHT, CENTER)
– BorderLayout: opción por defecto del panel de contenido de un JFrame.• Puede elegir dónde colocar los componentes: NORTH, SOUTH, EAST, WEST, CENTER (por defecto)
![Page 10: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/10.jpg)
El lenguaje de programación Java 10
BorderLayout
setLayout(new BorderLayout());this.getContentPane(componente, “South”);
• Las constantes se han definido como String.• El componente tiende a ocupar todo el espacio disponible.•Solución: situar un panel (JPanel) en cada zona que necesitemos
![Page 11: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/11.jpg)
El lenguaje de programación Java 11
Etiquetas. JLabelJLabel etiq2 = new JLabel( "Etiqueta2" );
etiq2.setText(“Soy una etiqueta”);
etiq2.setFont( new Font("Helvetica", Font.BOLD, 18 ));
Icon imagen = new ImageIcon( "star0.gif" );
JLabel etiq3 = new JLabel( "Etiqueta3");
etiq3.setIcon(imagen);
![Page 12: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/12.jpg)
12
JTextField, JTextArea y JScrollPane
• Introducir texto en una línea o varias.
• Métodos heredados de JTextComponent:– void setText(String t)– String getText()– void setEditable(boolean b)
• El layout puede ajustar el tamaño del JTextField aunque se establezca un tamaño preferido (setColumns)
• JTextArea se pueden establecer las filas (rows) y columnas (columns)
• Se puede añadir una barra de scroll (JScrollPane).Aparecerá cuando el texto exceda el tamaño establecidotextArea = new JTextArea(8,40);
JScrollPane sp = new JScrollPane(textArea);
contentPane.add(scrollPane, BorederLayout.CENTER);
![Page 13: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/13.jpg)
El lenguaje de programación Java 13
Pestañas. JTabbedPane
• String informativo sobre los componentes:
boton1.setToolTipText( "Soy el JBoton 1" );
•Se pueden asignar imágenes (Icon) a los botones (JButton).
• Cada pestaña debe tener un JPanel para añadir los componentes
• Botón de dos estados• JRadioButton y JCheckBox son
subclases
ButtonGroup(exclusividad)
![Page 14: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/14.jpg)
El lenguaje de programación Java 14
JCheckBox y JRadioButton
• JCheckBox:– JCheckBox(String label)– JCheckBox(String label, boolean state)– JCheckBox(String label, Icon icon)– boolean isSelected()– void setSelected(boolean state)
• JRadioButton:– JRadioButton(String label, boolean state)– JRadioButton(String label, Icon icon)– Para una selección exclusiva se tienen que agrupar en ButtonGroup:
• add(AbstractButton b)• ButtonModel getSelection();
– ButtonModel• String getActionCommand()
![Page 15: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/15.jpg)
El lenguaje de programación Java 15
JComboBox
• Seleccionar entre muchas alternativas
• Métodos:– void setEditable(boolean b)– void addItem(Object item)– void insertItemAt(Object item, int index)– void removeItem(Object item)– void removeItemAt(int index)– void removeAllItems()– Object getSelectedItem()
![Page 16: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/16.jpg)
El lenguaje de programación Java 16
JOptionPane
• Ventanas de mensajes estándar que permiten mostrar un mensaje de información al usuario o capturar información.
• Casi todos los usos de esta clase son llamadas a uno de los métodos static showXxxDialog – JOptionPane.showMessageDialog();– JOptionPane.showConfirmDialog();– JOptionPane.showOptionDialog)();– JOptionPane.showInputDialog();
• Todos los diálogos son modales (no continúa la ejecución hasta que no se cierra).
• Se pueden configurar mediante parámetros: título, mensaje, icono, etc.
![Page 17: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/17.jpg)
Ejemplos JOptionPaneJOptionPane.showMessageDialog(null, "Cuidado con lo que haces", "Consejo", JOptionPane.ERROR_MESSAGE);
int opcion = JOptionPane.showConfirmDialog(null, “Debes elegir uno", “Decide", JOptionPane.YES_NO_OPTION);
Tipos de opciones:DEFAULT_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_CANCEL_OPTION
Tipos de mensajes:ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGEPLAIN_MESSAGE
Respuestas:OK_OPTIONCANCEL_OPTIONYES_OPTIONNO_OPTIONCLOSED_OPTION
![Page 18: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/18.jpg)
El lenguaje de programación Java 18
Ejemplo JOptionDialog
Object[] opciones = { "Continuar", "Cancelar", "Guardar Estado" };
//Devuelve el índice de la opción elegida
int opcion = JOptionPane.showOptionDialog(null,
"Podemos estar en un estado inconsistente", "¡¡¡OJO!!!",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, opciones, opciones[0]);
![Page 19: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/19.jpg)
El lenguaje de programación Java 19
Ejemplo entrada de datos
Object [] valores = {"Libro","CD","DVD" };
String respuesta=(String) JOptionPane.showInputDialog(
null,
"Elija el tipo de producto", "Entrada de datos",
JOptionPane.QUESTION_MESSAGE, null, valores,
valores[0]);
![Page 20: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/20.jpg)
El lenguaje de programación Java 20
Ejemplo entrada de datos libreIcon icono = new ImageIcon("icons/Question.gif");
String respuesta = (String)JOptionPane.showInputDialog(
null,
"Introduzca el nombre que va a borrar",
"Eliminar contacto", JOptionPane.QUESTION_MESSAGE,
icono, null,null);
![Page 21: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/21.jpg)
El lenguaje de programación Java 21
Diálogos de Ficheros
• clase JFileChooser• Métodos:
– showOpenDialog: para abrir fichero– showSaveDialog: para guardar fichero
• Pasos:JFileChooser chooser = new JFileChooser();
// Establecer el directorio de trabajo como
// el directorio por defecto
chooser.setCurrentDirectory(new File(“.”));
//Establecer un fichero por defecto
chooser.setSelectedFile(new File(nombreFichero));
//abrir la ventana de diálogo
int resultado = chooser.showOpenDialog(parent) ó
int resultado = chooser.showSaveDialog(parent)
![Page 22: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/22.jpg)
El lenguaje de programación Java 22
JFileChooser.showOpenDialog
File ficheroSeleccionado = chooser.getSelectedFile();
Valores de retorno: JFileChooser.APPROVE_OPTION JFileChooser.CANCEL_OPTION
![Page 23: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/23.jpg)
El lenguaje de programación Java 23
Filtro de ficheros• Ejemplo: mostrar sólo ficheros de imágenes “gif”
import javax.swing.filechooser.FileFilter;
public class GifFilter extends FileFilter{/**
* Establece qué ficheros serán aceptador */
public boolean accept (File f){return f.getName().toLowerCase().endsWith(“.gif”) ||
f.isDirectory();}/** Describe el tipo de ficheros que se van* a mostrar*/ public String getDescription(){
return “Imágenes GIF”;}
}
![Page 24: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/24.jpg)
El lenguaje de programación Java 24
Establecer el filtro
chooser.setFileFilter(new GifFilter());
![Page 25: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/25.jpg)
El lenguaje de programación Java 25
Asociar JFileChooser a una opción de menú
void jMenuItemAbrir_actionPerformed(ActionEvent e) { JFileChooser chooser = new JFileChooser(); // Establecer el directorio de trabajo como // el directorio por defecto chooser.setCurrentDirectory(new
java.io.File("./imagenes")); //Establecer el filtro chooser.setFileFilter(new GifFilter()); //abrir la ventana de diálogo int resultado = chooser.showOpenDialog(this); if (resultado == JFileChooser.APPROVE_OPTION){ java.io.File f = chooser.getSelectedFile();
jLabelEstado.setText(“Abriendo " + f.getName()); } }
![Page 26: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/26.jpg)
El lenguaje de programación Java 26
Menús
JMenuBar JPopupMenu
1. Añadimos un menú
2. Haciendo doble click abrimos el diseñador de menús
![Page 27: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/27.jpg)
El lenguaje de programación Java 27
Diseñador de menús
![Page 28: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/28.jpg)
El lenguaje de programación Java 28
Asignación del menú al componente
• Una vez cerrado el diseñador de menús, asignamos el JMenuBar al componente que lo contendrá (JFrame o JDialog).
• Desde el diseñador
• El resultado es que en laen la definición de VentanaContadorse añada:
this.setJMenuBar(jMenuBar1);Propiedades del JFrame o JDialog
![Page 29: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/29.jpg)
29
Modelo de delegación de eventos• Los eventos se encapsulan en una jerarquía de clases donde la clase
raíz es java.util.EventObject
• Fuentes de eventos (Source):
– es un objeto que tiene la capacidad de detectar eventos y notificar a los receptores de eventos que se han producido esos eventos
– mantiene una lista de objetos receptores y los tipos de eventos a los que están suscritos. El programador crea esa lista utilizando llamadas a los métodos add<TipoEvento>Listener() (tb remove).
– Generalmente un componente del interfaz gráfico
• Receptores de eventos (Listener):
– es una clase (o una subclase de una clase) que implementa un interfaz receptor específico java.util.EventListener
– declara TODOS los métodos adecuados al tratamiento de los eventos de su clase
• Resultan de utilidad las clases internas
![Page 30: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/30.jpg)
30
Modelo de delegación de eventos
• Emparejamiento entre clases de eventos y definiciones de interfaces.
Por ejemplo:
– class MouseEvent
– interfaz MouseListener
– En java.awt.Component existe el método addMouseListener
• Adaptadores (Adapter):
– evita tener que escribir todos los métodos del interfaz
– implementa todos los métodos del interfaz con métodos vacíos
– una clase receptor puede definirse como una clase que extiende una clase Adapter (en lugar de una clase que implementa el interfaz) y sobreescribe los métodos que necesite
– Ejemplo:
public abstract class MouseAdapter implements MouseListener
![Page 31: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/31.jpg)
31
Interfaces Listener Métodos
ActionListener actionPerformed(ActionEvent)
KeyListener KeyAdapter
keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)
MouseListener MouseAdapter
mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)
WindowListener WindowAdapter
windowOpened(WindowEvent) windowClosing(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent)
ItemListener itemStateChanged(ItemEvent)
![Page 32: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/32.jpg)
El lenguaje de programación Java 32
Modelo de delegación de eventos. Ejemplo
import java.awt.*;class CierraVentanas implements WindowListener{public void windowClosing(WindowEvent we){
Window w = (Window)we.getSource();w.dispose();System.exit(0);
}public void windowOpened (WindowEvent we){}public void windowClosed (WindowEvent we){}public void windowActivated (WindowEvent we){}public void windowDeactivated (WindowEvent we){}public void windowIconified (WindowEvent we){}public void windowDeiconified (WindowEvent we){}}public class MiAplicacion extends JFrame{
...public MiAplicacion(){
...this.addWindowListener(new CierraVentanas());...
}}
![Page 33: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/33.jpg)
El lenguaje de programación Java 33
Ejemplo2: WindowAdapterimport java.awt.*;
class CierraVentanas extends WindowAdapter{
//Sólo implementamos el método que necesitamos
public void windowClosing(WindowEvent we){
Window w = (Window)we.getSource();
w.dispose();
System.exit(0);}
}
public class MiAplicacion extends JFrame{...public MiAplicacion(){
...this.addWindowListener(new CierraVentanas());...
}}
![Page 34: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/34.jpg)
El lenguaje de programación Java 34
Ejemplo: JFrameContador v.1
1) JButton jButtonDec;
2) jButtonDec.addActionListener(new BDListener());3) //Clase interna en JFrameContador class BDListener implements ActionListener{ public void actionPerformed(ActionEvent event){ miConta.decrementar(); imprimirValor(); } }
![Page 35: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/35.jpg)
El lenguaje de programación Java 35
Ejemplo: JFrameContador v.2
jButtonDec.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
miConta.decrementar(); imprimirValor(); } });
• Cualquiera de las clases listener pueden ser clases anónimas, que tiene la ventaja de no necesitar un nuevo nombre de clase
• Ningún otro componente podría invocar a este ActionListener
![Page 36: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/36.jpg)
El lenguaje de programación Java 36
En JBuilder se puede elegir el estilo
Clase interna
![Page 37: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/37.jpg)
El lenguaje de programación Java 37
Generar los métodos asociados a los eventos sobre los componentes, en el estilo seleccionado
void jButtonSumar_actionPerformed(ActionEvent e) { //acciones asociadas al evento (programador) conta.incrementar(); imprimirValor(); //rellena el JTextField }
![Page 38: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/38.jpg)
El lenguaje de programación Java 38
Diseñador de menús. Acciones asociadas
void jMenuItemSalir_actionPerformed(ActionEvent e) { //El cuerpo lo rellena el programador
System.exit(0); }
![Page 39: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/39.jpg)
El lenguaje de programación Java 39
interface Action/ class AbstractAction
• Métodos:– void actionPerformed(ActionEvent event)– void setEnabled(boolean b)– boolean isEnabled()– void putValue(String key, Object value)
• NAME, SMALL_ICON, SHORT_DESCRIPTION, MNEMONIC_KEY, ACCELERATOR_KEY
– Object getValue(String key)– void addPropertyChangeListener(PropertyChangeListener
listener)– void removePropertyChangeListener(PropertyChangeListener
listener)
• Ejemplo:action.putValue(Action.NAME, “Abrir");action.putValue(Action.SMALL_ICON,new ImageIcon(“open.gif"));
![Page 40: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/40.jpg)
El lenguaje de programación Java 40
Ejemplo: Acción abrir fichero
private class AbrirAction extends AbstractAction{ public AbrirAction(){ putValue(Action.NAME, "Abrir"); putValue(Action.SMALL_ICON,
new ImageIcon("./imagenes/open.gif")); } public void actionPerformed (ActionEvent e){ abrirFichero(); } }
• En el método jbInit(): //Añadir la misma acción a la barra de tareas y menú AbrirAction aa = new AbrirAction(); jToolBarArchivo.add(aa); jMenuItemAbrir.setAction(aa);
![Page 41: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/41.jpg)
El lenguaje de programación Java 41
Asociar acciones a teclas
• Clase KeyStroke, encapsula la descripción de una tecla• Para generar un objeto no se llama al constructor sino al
método static, getKeyStroke• Todo JComponent tiene (entre otros) un mapa de entrada
(InputMap) que registra los objetos KeyStroke, cuando el componente contiene el componente que tiene el foco del teclado.– InputMap imap =
panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
• Todo componente tiene un mapa de acciones (ActionMap) que es el que realmente asocia KeyStroke con acciones.
• Se asocian las acciones con las teclas asociándoles el mismo nombre.
![Page 42: Programación gráfica](https://reader036.vdocuments.pub/reader036/viewer/2022062720/5681358b550346895d9cee5f/html5/thumbnails/42.jpg)
El lenguaje de programación Java 42
Ejemplo: asociar keyStroke con acciónInputMap imap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke ctrlY = KeyStroke.getKeyStroke(KeyEvent.VK_Y, Event.CTRL_MASK);
//o KeyStroke ctrlY = KeyStroke.getKeyStroke(“ctrl Y”);
imap.put(ctrlY, “panel.yellow”):
ActionMap amap = panel.getActionMap();
ColorAction yellowAction = new ColorAction(…);
amap.put(“panel.yellow”, yellowAction);