La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

TEMA 1. Diseño de interfaces gráficas

Presentaciones similares


Presentación del tema: "TEMA 1. Diseño de interfaces gráficas"— Transcripción de la presentación:

1 TEMA 1. Diseño de interfaces gráficas
Introducción. Ejemplos. Componentes de la interfaz Programación dirigida por eventos Gestores de ubicación La librería Swing Primitivas gráficas de pantalla. Diseño de interfaces gráficas de usuario

2 Bibliografía http://java.sun.com/docs/books/tutorial/uiswing/
Kathy Walrath, et all. “The JFC Swing Tutorial”. Ed. Addison Wesley

3 Práctica 1 1 . Introducción. Ejemplos
El desarrollo de la aplicación se descompone en dos partes diferenciadas: Diseño de la interfaz gráfica Diseño de las clases para el funcionamiento de la calculadora, que supone la definición de un autómata de estados.

4 1 . Introducción. Ejemplos

5 Práctica 1 1 . Introducción. Ejemplos
Definición de un marco, componente JFrame, que alberga todos las demás componentes. Se trata del contenedor principal de la aplicación. class GUICalculadora extends JFrame { public GUICalculadora() //obtenemos el contendor para colocar las componentes Container marco=getContentPane(); // Asignamos un gestor de ubicación de las componentes BorderLayout planificadorCalculadora = new BorderLayout(); marco.setLayout(planificadorCalculadora);

6 1 . Introducción. Ejemplos
BorderLayout

7 1 . Introducción. Ejemplos
Práctica 1 Guardamos en la clase Contexto el marco principal para poder acceder a el desde cualquier parte de la interfaz Contexto.marco=this;

8 1 . Introducción. Ejemplos
Práctica 1 En la parte Norte colocaremos el campo de texto para visualizar los operadores y el botón CE para el borrado y comienzo de una nueva operación. Ambas componentes están agrupadas en una clase denominada GUIResultCE. GUIResultCE instResultCE = new GUIResultCE(Color.white, Color.red); marco.add(instResultCE,BorderLayout.NORTH); Contexto. barraVisor=instResultCE;

9 1 . Introducción. Ejemplos
Práctica 1 En la parte Centro el juego de botones de los dígitos, todos ellos están agrupados en la clase GUIDigitos. GUIDigitos instGUIDigitos = new GUIDigitos(Color.orange); marco.add(instGUIDigitos,BorderLayout.CENTER); Contexto. barraDigitos=instGUIDigitos;

10 Práctica 1 1 . Introducción. Ejemplos
En la parte Este colocamos el juego de operaciones GUIOperadores instGUIOperadores = new GUIOperadores(Color.magenta); marco.add(instGUIOperadores,BorderLayout.EAST); Contexto. barraOperadores=instGUIOperadores;

11 Práctica 1 1 . Introducción. Ejemplos
Por último en el Sur colocamos la barra de estado GUIBarraEstado instGUIBarraEstado = new GUIBarraEstado(Color.grey); marco.add(instGUIBarraEstado,BorderLayout.SOUTH) Contexto. barraEstado=instGUIBarraEstado;

12 Práctica 1 1 . Introducción. Ejemplos
Al final colocamos las propiedades del marco y creamos y guardamos el oyente de todos los botones en la clase Contexto. setSize(200,200); //Para centrar la ventana en la pantalla setLocationRelativeTo(null); setTitle("Calculadora1"); setResizable(false); setVisible(true); Contexto.oy=new Oyente();

13 Práctica 1 1 . Introducción. Ejemplos
class GUIBarraEstado extends JPanel { JLabel etiquetaEstado = new JLabel(); public GUIBarraEstado(Color colorFondo) {etiquetaEstado = new JLabel(“Leyendo Operando1"); //indica alineación a la izquierda y número de espacios horizontales y verticales FlowLayout planificadorBarraEstado = new FlowLayout(FlowLayout.LEFT,10, 5); setLayout(planificadorBarraEstado); setBackground(colorFondo); add(etiquetaEstado); }//Fin del constructor GUIBarraEstado(Color,Color)

14 Panel 1 . Introducción. Ejemplos
Un Panel es un contenedor de componentes que no tiene ningún elemento predefinido. El gestor de ubicación empleado es el FlowLayout que añade los componentes de izquierda a derecha y de arriba abajo.

15 Práctica 1 1 . Introducción. Ejemplos
public void actualizaBarraEstado(String mensaje) {etiquetaEstado.setText(mensaje); }//Fin de actualizaMensaje

16 Práctica 1 1 . Introducción. Ejemplos
public class GUIResultCE extends JPanel { JTextField visor = new JTextField("",10); JButton botonCE = new JButton("CE"); public GUIResultCE(Color colorFondo, Color colorBoton) {visor.setHorizontalAlignment(JTextField.RIGHT); // Color cuando el campo de texto es sólo de salida visor.setDisabledTextColor(Color.black); FlowLayout planificadorResultCE = new FlowLayout(FlowLayout.LEFT,10, 5); setLayout(planificadorResultCE);

17 Práctica 1 1 . Introducción. Ejemplos
public class GUIResultCE extends JPanel { visor.setBackground(colorFondo); visor.setEnabled(false); add(visor); botonCE.addMouseListener(Contexto.oy); botonCE.setForeground(colorBoton); add(botonCE); }//Fin del constructor GUIResultCE(Color,Color)

18 Práctica 1 1 . Introducción. Ejemplos
public void actualizaVisor(String texto) {visor.setText(texto); }//Fin de actualizaVisor public String dameVisor() {return visor.getText(); }//Fin de dameVisor

19 Práctica 1 1 . Introducción. Ejemplos
public class GUIOperadores extends JPanel { private final int NUM_OPERADORES = 4; JButton [] botonOperador = new JButton[NUM_OPERADORES]; public GUIOperadores(Color colorBotones) {GridLayout PlanificadorOperadores = new GridLayout(NUM_OPERADORES,1); setLayout(PlanificadorOperadores); botonOperador[0] = new JButton("+"); botonOperador[1] = new JButton("-"); botonOperador[2] = new JButton("*"); botonOperador[3] = new JButton("/");

20 Práctica 1 1 . Introducción. Ejemplos
public class GUIOperadores extends JPanel { for(int i = 0; i < NUM_OPERADORES; i++) botonOperador[i].setBackground(colorBotones); add(botonOperador[i]); obotonOperador[i].addMouseListener(Contexto.oy); }}}

21 Práctica 1 1 . Introducción. Ejemplos
public class GUIDigitos extends JPanel { private final int NUM_DIGITOS = 12; JButton [] botonDigito = new JButton[NUM_DIGITOS]; public GUIDigitos (Color colorBotones) {GridLayout PlanificadorBotones = new GridLayout(4,3); setLayout(PlanificadorBotones); for(int fila = 0; fila < 3; fila ++) for(int columna = 0; columna < 3; columna ++) botonDigito[fila*3+columna] = new JButton(String.valueOf(fila*3+columna)); botonDigito[9] = new JButton("9"); botonDigito[10] = new JButton("."); botonDigito[11] = new JButton("=");

22 Práctica 1 1 . Introducción. Ejemplos
for(int i = 0; i < NUM_DIGITOS; i++) {botonDigito[i].setBackground(colorBotones); add(botonDigito[i]); botonDigito[i].addMouseListener(Contexto.oy); }}

23 Práctica 1 1 . Introducción. Ejemplos
El gestor de ubicación GridLayout define una retícula de componentes, indicando el número de filas y columnas. Las componentes se colocan de izquierda a derecha y de arriba abajo.

24 Práctica 1 1 . Introducción. Ejemplos
public class OyenteBoton extends MouseAdapter {public void mouseClicked(MouseEvent eventoEntrante) { JButton boton = (JButton)eventoEntrante.getSource(); char ch = boton.getText().charAt(0); Automata.CaracterIntroducido(ch); }//Fin de mouseClicked public void mouseExited(MouseEvent eventoEntrante){;} public void mouseReleased(MouseEvent eventoEntrante){;} public void mousePressed(MouseEvent eventoEntrante){;} public void mouseEntered(MouseEvent eventoEntrante){;} }//Fin de la clase ControlRaton

25 Práctica 1 1 . Introducción. Ejemplos class Contexto
{ public static GUIResultCE barraVisor = null; public static GUIBarraEstado barraEstado = null; //public static GUIDigitos botoneraDigitos = null; //public static GUIOperadores botoneraOperadores = null public static Oyente oy=null;

26 Práctica 1 1 . Introducción. Ejemplos import javax.swing.*;
class Principal { public static void main(String args[]) { GUICalculadora calculadora = new GUICalculadora(); }//Fin de main }

27 1 . Introducción. Ejemplos

28 Componentes de la interfaz
2 . Componentes de interfaz Componentes de la interfaz Los controles de una interfaz poseen una representación gráfica, un conjunto de campos y un conjunto de métodos. Distinguimos entre dos tipos de controles, los contenedores y las componentes básicas que se ubican en los contenedores.

29 Índice visual de controles
2 . Componentes de interfaz Índice visual de controles

30 Índice visual de controles
2 . Componentes de interfaz Índice visual de controles

31 Índice visual de controles
2 . Componentes de interfaz Índice visual de controles

32 HTML en componentes 2 . Componentes de interfaz
Muchas componentes que usan texto como parte de su visualización, pueden determinar su apariencia a través de etiquetas Html de formateo. Ejemplo: Label=new Jlabel(“<html><b>hola</b></html>”);

33 Contenedores de nivel superior
2 . Componentes de interfaz Contenedores de nivel superior Swing proporciona tres clases de contenedores de nivel superior: JFrame, JDialog y JApplet. Cualquier control de interfaz forma parte de una jerarquía de contenedores. Cada componente solo puede estar contenida en una. Cada contenedor de nivel superior tiene un Content Pane sobre el que se ubican las componentes. Se obtiene con getContentPane. Se pueden añadir barras de menú en los contenedores de nivel superior, mediante el método setJMenuBar.

34 Contenedores de nivel superior
2 . Componentes de interfaz Contenedores de nivel superior

35 Contenedores de nivel superior
2 . Componentes de interfaz Contenedores de nivel superior Cada contenedor de nivel superior mantiene un contenedor intermediario denominado root pane, que contiene a Content Pane y al Menu Bar. Normalmente no es necesaria la gestión del root pane salvo que se quieran interceptar clicks de ratón o dibujos sobre varios componentes.

36 Contenedores de nivel superior
2 . Componentes de interfaz Contenedores de nivel superior

37 Contenedores de nivel superior
2 . Componentes de interfaz Contenedores de nivel superior El Panel de Cristal Oculto, por defecto. Si se hace visible, es como si se pusiera una hoja de cristal sobre las otras partes del panel raiz. Es completamente transparente (a menos que hagamos que el método paint haga algo) e intercepta los eventos de entrada para el panel raíz. El panel de capas Sirve para posicionar sus contenidos, que consisten en el panel de contenido y la barra de menú opcional. También puede contener otros componentes en un orden Z especificado. El Panel de Contenido El contenedor de los componentes visibles del panel raíz, excluyendo la barra de menú. La barra de menú opcional El hogar para los menús del panel de contenido. Si el contenedor tiene una barra de menús, generalmente se utilizan los métodos setMenuBar o setJMenuBar del contenedor para poner la barra de menú en el lugar apropiado.

38 La clase JComponent 2 . Componentes de interfaz
Salvo los contenedores de nivel superior todos las demás componentes de interfaz descienden de la clase JComponent. La clase JComponent, desciende de Container que a su vez desciende de Component. Tiene muchas características: Tool tips (setToolTipText) Bordes Doble Buffering Propiedades a la carta Ver en la documentación algunos de sus métodos

39 2 . Componentes de interfaz
Componentes de texto

40 2 . Componentes de interfaz
Componentes de texto

41 TextField 2 . Componentes de interfaz import java.awt.*;
import java.awt.event.*; Import java.swing.*; public class Camposdetexto extends JFrame { TextField t; public Camposdetexto() { Container marco=getContentPane(); marco.setLayout(new FlowLayout()); t= new JTextField("valor por defecto"); marco.add(t); Oyente oy=new Oyente(); t.addActionListener( oy) } // se implementa como una clase interna // El ActionEvent se produce cuando se inserta el salto de línea class Oyente implements ActionListener { public void actionPerformed(ActionEvent e) { … ;}}

42 JTextArea 2 . Componentes de interfaz
public class AreaTexto extends JFrame{ TextArea ta; public AreaTexto() { Container marco=getContentPane(); marco.setLayout(new FlowLayout()); ta = new JTextArea("tira \n char",3,10); marco.add(ta); Oyente Oy=new Oyente(); ta.addTextListener(Oy);} class Oyente implements TextListener{ public void textValueChanged(TextEvent e) {escribe();} public void escribe() { ….}

43 2 . Componentes de interfaz
Menús

44 2 . Componentes de interfaz
Menús

45 Menús 2 . Componentes de interfaz //Donde se cree el menu
JMenuBar menuBar; JMenu menu, submenu; JMenuItem menuItem; JRadioButtonMenuItem rbMenuItem; JCheckBoxMenuItem cbMenuItem; //Creamos el menu bar. menuBar = new JMenuBar(); //Construimos el primer menu. menu = new JMenu("A Menu"); menu.setMnemonic(KeyEvent.VK_A); menuBar.add(menu);

46 Menús 2 . Componentes de interfaz //un grupo de JMenuItems
menuItem = new JMenuItem("A text-only menu item", KeyEvent.VK_T); menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_1, ActionEvent.ALT_MASK)); menu.add(menuItem); menuItem1 = new JMenuItem("Both text and icon", new ImageIcon("images/middle.gif")); menuItem1.setMnemonic(KeyEvent.VK_B); menu.add(menuItem1);

47 Menús 2 . Componentes de interfaz
//Un grupo de radio button menu items menu.addSeparator(); ButtonGroup group = new ButtonGroup(); rbMenuItem = new JRadioButtonMenuItem("A radio button menu item"); rbMenuItem.setSelected(true); rbMenuItem.setMnemonic(KeyEvent.VK_R); group.add(rbMenuItem); menu.add(rbMenuItem);

48 Menús //un check box menu items menu.addSeparator();
2 . Componentes de interfaz Menús //un check box menu items menu.addSeparator(); cbMenuItem = new JCheckBoxMenuItem("A check box menu item"); cbMenuItem.setMnemonic(KeyEvent.VK_C); menu.add(cbMenuItem);

49 Menús 2 . Componentes de interfaz //a submenu menu.addSeparator();
submenu = new JMenu("A submenu"); submenu.setMnemonic(KeyEvent.VK_S); menuItem = new JMenuItem("An item in the submenu"); menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_2, ActionEvent.ALT_MASK)); submenu.add(menuItem); menuItem = new JMenuItem("Another item"); menu.add(submenu);

50 Menús 2 . Componentes de interfaz
//Construyendo el segundo menu en el menu bar. menu = new JMenu("Another Menu"); menu.setMnemonic(KeyEvent.VK_N); menu.getAccessibleContext().setAccessibleDescription( "This menu does nothing"); menuBar.add(menu); ... frame.setJMenuBar(theJMenuBar);

51 Menú Popup 2 . Componentes de interfaz //Crear un popup menu.
popup = new JPopupMenu(); menuItem = new JMenuItem("A popup menu item"); menuItem.addActionListener(this); popup.add(menuItem); menuItem = new JMenuItem("Another popup menu item"); //Añadir oyentes que puedan manejar popup menus. MouseListener popupoyente = new OyentePopup(); output.addMouseListener(popupoyente);

52 2 . Componentes de interfaz
Menú Popup class OyentePopup extends MouseAdapter { public void mouseClicked(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { popup.show(e.getComponent(), e.getX(), e.getY()); } } }

53 Dialog 2 . Componentes de interfaz
La forma más sencilla de definir una caja de diálogo es mediante la clase JOptionPane . La clase ProgressMonitor muestra el progreso de una operación. Las clases JColorChooser y JFileChooser, son casos especiales orientados a la selección de color y ficheros. Para usar una caja de diálogo para imprimir usar Print API. Para crear una caja de diálogo a la carta debemos usar la clase JDialog directamente.

54 Dialog 2 . Componentes de interfaz
Normalmente una caja de diálogo es dependiente de un marco. Cuando el marco es destruido el cuadro también. Si el marco se minimiza también lo hará el cuadro. Un cuadro puede ser modal de forma que cuando es visible bloquea todas las componentes de la interfaz. La clase JDialog, tiene un root pane igual que la clase JFrame y su funcionamiento es similar.

55 2 . Componentes de interfaz
JOptionPane Con esta clase se pueden crear diferentes tipos de cajas de diálogo. //título e icono por defecto JOptionPane.showMessageDialog(frame, "Eggs aren't supposed to be green.");

56 2 . Componentes de interfaz
JOptionPane //icono de advertencia JOptionPane.showMessageDialog(frame, "Eggs aren't supposed to be green.", "Inane warning", JOptionPane.WARNING_MESSAGE);

57 JOptionPane 2 . Componentes de interfaz //Custom button text
Object[] options = {"Yes, please", "No, thanks", "No eggs, no ham!"}; int n = JOptionPane.showOptionDialog(frame, "Would you like some green eggs to go " + "with that ham?", "A Silly Question", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2]);

58 Color chooser El ColorChooser es un control para seleccionar colores:
2 . Componentes de interfaz Color chooser El ColorChooser es un control para seleccionar colores:

59 Color chooser 2 . Componentes de interfaz
public class ColorChooserDemo extends JPanel ... { public ColorChooserDemo() { super(new BorderLayout()); banner = new JLabel("Welcome to the Tutorial Zone!", JLabel.CENTER); banner.setForeground(Color.yellow); . . . tcc = new JColorChooser(banner.getForeground()); . . . add(tcc, BorderLayout.PAGE_END); }

60 Color chooser 2 . Componentes de interfaz
Un JColorChooser utiliza una instancia de un ColorSelectionModel que contiene y maneja la selección actual del color. El modelo recoge un cambio de color cuando el usuario cambia el color de JColorChooser. Cuando se coloca un oyente de este tipo de eventos hay que tener cuidado ya que el oyente se tiene que colocar sobre el modelo: tcc.getSelectionModel().addChangeListener(this); . . . public void stateChanged(ChangeEvent e) { Color newColor = tcc.getColor(); banner.setForeground(newColor); }

61 2 . Componentes de interfaz
Modelos Como ocurre con el JColorChooser muchas componentes de swing tiene modelos que almacenan el estado de la componente. Por ejemplo en un JButton se almacena si esta seleccionado, activo, presionado o cuál es la tecla que lo acciona.

62 2 . Componentes de interfaz
Color chooser Para mostrar un JColorChooser en un cuadro de diálogo tendremos que invocar el método showDialog, indicando el padre del Dialog, el texto del cuadro y el color inicial que debe estar seleccionado. Color newColor = JColorChooser.showDialog( ColorChooserDemo2.this, "Choose Background Color", banner.getBackground());

63 File Chooser 2 . Componentes de interfaz
File choosers proporciona una componente para acceder al sistema de ficheros de forma que se pueda seleccionar un fichero o directorio. Para visualizar un file chooser se usa la clases JFileChooser API que muestra un diálogo modal que contiene el selector de ficheros. Una caja de diálogo modal es aquella que mientras esta activada anula el resto de la igu.

64 2 . Componentes de interfaz
File Chooser

65 2 . Componentes de interfaz
File Chooser Para crear un selector de fichero es similar al selector de color: JFileChooser fc = new JFileChooser(); ... //Como respuesta a un click de ratón int returnVal = fc.showOpenDialog(aComponent); El argumento aComponent especifica el padre de la caja de diálogo.

66 File Chooser 2 . Componentes de interfaz
public void actionPerformed(ActionEvent e) { if (e.getSource() == openButton) { int returnVal = fc.showOpenDialog(FileChooserDemo.this); if (returnVal =JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); } } ... }

67 Lista 2 . Componentes de interfaz
Una lista presenta al usuario un grupo de items, visualizados en una o mas columnas para seleccionar. Dentro de Swing existen otras componentes orientadas al mismo fin como son el Combo box, menús y los botones de radio.

68 Lista // Crear una lista con 2 . Componentes de interfaz
Inicializar una lista directamente con un vector de Objects: // Crear una lista con String[] data = {"one", "two", "three", "four"}; JList dataList = new JList(data); Inicializar una lista a través de un ListModel, en particular se puede utilizar el DefaultListModel.

69 Lista 2 . Componentes de interfaz
Inicializar una lista a través de un ListModel, en particular se puede utilizar el DefaultListModel. listModel = new DefaultListModel(); listModel.addElement(“primero"); listModel.addElement(“segundo"); listModel.addElement(“tercero"); listModel.addElement(“cuarto"); listModel.addElement(“quinto"); listModel.addElement(“sexto"); list = new JList(listModel);

70 Lista String[] data = {"one", "two", "three", "four"};
2 . Componentes de interfaz Lista Para seleccionar un elemento de la lista: String[] data = {"one", "two", "three", "four"}; JList dataList = new JList(data); dataList.setSelectedIndex(1); dataList.getSelectedValue();

71 Lista 2 . Componentes de interfaz
El evento que se genera cuando se realiza una selección del item es ListSelecctionEvent.


Descargar ppt "TEMA 1. Diseño de interfaces gráficas"

Presentaciones similares


Anuncios Google