Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Swing para Java, Apuntes de Ingeniería Infórmatica

Asignatura: Técnicas de Programación, Profesor: , Carrera: Ingeniería Informática, Universidad: UAX

Tipo: Apuntes

Antes del 2010

Subido el 22/05/2007

_vivayo_
_vivayo_ 🇪🇸

3.7

(117)

149 documentos

1 / 24

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1
1
Construcción de GUI en
Java
Tecnología Swing
NetScape (IFC) , IBM, Lighthouse Design
•JFC
AWT, Java 2D, Accesibility, Drag and Drop, Swing
Cambios importantes desde la versión 1.1 a 1.2
Versión 1.1 AWT
Versión 1.2 en adelante incluyen JFC: SWING
Actualmente, los navegadores no entienden JFC
Swing está apoyado en parte en AWT
AWT Abstract Window Toolkit
La librería se encuentra en el paquete java.awt
2
AWT v SWING
Por cada elemento de AWT existe un elemento en
el sistema operativo que lo representa
El resultado final dependerá de este elemento
Problema:
Hay facilidades que algún sistema operativo no tiene
por lo que AWT define lo mínimo común
Swing elimina este problema
Definea lo máximo
Necesita los paquetes (y subpaquetes)
java.awt.* y javax.swing.*
3
Elementos de Swing
Componentes y contenedores
Componentes. Aspecto visible del interfaz
botones, etiquetas, campos de texto, etc
Se sitúan dentro de algún contenedor
Contenedores. Almacenes de componentes
Pueden contener a otros contenedores
Dos tipos
Superiores: JApplet, JFrame, JDialog,
Intermedios: JPanel, JScrollPane,
JSplitPane, JTabbedPane, JToolBar y otros
más especializados
4
Contenedores superiores I
Disponen de un panel de contenidos (contentPane)
Pueden opcionalmente disponer de un menú
Container cpane = unaFrame.getContetPane();
unaFrame.setContentPane(unPanel);
unaFrame.setJMenuBar(unMenuBar);
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18

Vista previa parcial del texto

¡Descarga Swing para Java y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

1

– Versión 1.1•^ Cambios importantes desde la versión 1.1 a 1.2– AWT, Java 2D, Accesibility, Drag and Drop, Swing•^ JFC– NetScape (IFC) , IBM, Lighthouse Design^ •^ Tecnología Swing Java^ Construcción de GUI en

AWT

– La librería se encuentra en el paquete java.awt•^ AWT Abstract Window Toolkit•^ Swing está apoyado en parte en AWT– Actualmente, los navegadores no entienden JFC– Versión 1.2 en adelante incluyen JFC: SWING

2

• java.awt.*– Necesita los paquetes (y subpaquetes)– Definea lo máximo•^ Swing elimina este problemapor lo que AWT define lo mínimo común– Hay facilidades que algún sistema operativo no tiene•^ Problema:– El resultado final dependerá de este elementoel sistema operativo que lo representa^ •^ Por cada elemento de AWT existe un elemento en^ AWT v SWING

y javax.swing.*

3

• Dos tipos• Pueden contener a otros contenedores– Contenedores. Almacenes de componentes• Se sitúan dentro de algún contenedor• botones, etiquetas, campos de texto, etc– Componentes. Aspecto visible del interfaz^ • Componentes y contenedores^ Elementos de Swing

  • Superiores: (^) JApplet, JFrame, (^) JDialog,
  • Intermedios: (^) JPanel, JScrollPane,

JSplitPane, (^) JTabbedPane, JToolBar

(^) y otros

más especializados

4

Container cpane =• Pueden opcionalmente disponer de un menú • Disponen de un panel de contenidos (contentPane) Contenedores superiores I

(^) unaFrame .getContetPane();

unaFrame .setContentPane( unPanel );

unaFrame .setJMenuBar( unMenuBar );

5

Contenedores Superiores II

WindowContainer^ Component

AppletPanel

Frame

JDialog Dialog

JFrame

JApplet

setTitle() pack() setVisible()setSize()

getContentPane() (^) getContentPane() (^) getContentPane()

6

Contenedores Intermedios

JComponentContainer^ Component

JToolBar

JSplitPane

JPanel

JScrollPane setLayout() add()

JTabbedPane

•El contenedor más utilizado es

JPanel

7

• VI. Mostrar el contenedor superior• V. Dimensionar el contenedor superior• IV. Agregarlos al contenedor intermedio• III. Crear los componentes adecuadoscontenedor intermedio• II. Seleccionar un gestor de esquemas para elcontenedor intermedio • I. Crear un contenedor superior y obtener su Pasos a seguir Construcción de un GUI.

8

• JFrame -> Aplicación– JFrame, JDialog, JApplet^ •^ Hay tres clases contenedores superiores superior^ I. Crear un contenedor

void setJMenuBar(Menu)void setContentPane(Container)Container getContentPane() void pack()– Métodos de instancia ...• JDialog -> Diálogos • JApplet -> Applets – setTitle(),getTitle(),setIconImage()– Ventana de nivel superior con bordes y título

13

• Una alternativa a utilizar el método contenedor superior II V. Dimensionar el

setSize()

es

el método

pack()

, que calcula el tamaño de la

f.pack()....JFrame f = new JFrame(“Un ejemplo”);• void setMaximumSize(Dimension)• void setMinimunSize(Dimension) • void setPreferredSize(Dimension)– La dimensión de los componentes (preferida)– El número y orden de los componentes añadidos– El gestor de esquemasventana teniendo en cuenta

14

f.setVisible(true).... JFrame f = new JFrame(“Un ejemplo”);componentes y contenedores^ •^ Este método es válido para mostrar u ocultar^ setVisible(boolean)^ •^ Para hacerlo visible o invisible se utiliza el método superior^ VI. Mostrar el contenedor

15

}}f.setVisible(true);f.pack();cpane.add(bNo);cpane.add(bSi);cpane.add(l);JLabel l = new JLabel(“Nombre”);JButton bNo = new JButton(“NO”);JButton bSi = new JButton(“SI”);cpane.setLayout(new FlowLayout());Container cpane = f.getContetPane();JFrame f = new JFrame(“Un ejemplo·);public static void main(String [] args) {class GUI01 {import javax.swing.; import java.awt.; Ejemplo GUI

16

– No tiene el aspecto de una ventana Windows– La ventana no se cierra normalmenterealizan ninguna acción– Los botones Si y No ceden cuando se pulsan pero notamaño y mover están operativas– Sólo las funciones de maximizar y minimizar, cambiar^ • java GUI01^ Ejemplo GUI

17

• En el constructor llamar a– Realizar la ventana anterior como subclase de JFrame^ •^ GUI01n^ Ejemplo GUI

(^) super(String)

  • Luego, una clase con • Todo la interface gráfica se crea en el constructor

main

  • Hace (^) pack() • Crea un objeto de la clase (^) y lo muestra con (^) setVisible(true)

18

– Asociar acciones a los componentes– Estudiar en detalle los componentes– Usar adecuadamente los gestores de esquemas• Look and Feel– Controlar el aspecto de la aplicación^ • Queda por conocer:^ GUI en Swing

19

argumento^ •^ En algunos constructores y métodos aparece un^ Iconos

Icon

que representa un icono

• Icon

es una interface.

new ImageIcon(“c:\misIconos\bruja.gif”)^ ImageIcon i =^ – O biennew ImageIcon(“c:\misIconos\bruja.gif”)^ Icon i =•^ Para cargar un icono desde un fichero

20

"javax.swing.plaf.mac.MacLookAndFeel""com.sun.java.swing.plaf.motif.MotifLookAndFeel”"com.sun.java.swing.plaf.windows.WindowsLookAndFeel" "javax.swing.plaf.metal.MetalLookAndFeel" • Posibles Look and Feel } ...//Trabajar normalmente ... } } catch (Exception e) { UIManager.setLookAndFeel(“Look and feel valido”); try { public static void main(String[] args) { Aspecto de la aplicación

25

Sin Norte ni Este^ BorderLayout

GUI02.javaEjercicio: Realizar este GUI

26

– Dos filas y tres columnas cpane.setLayout(new GridLayout(2,3))posición (de izda a drcha y de arriba a abajo)•^ El orden a la hora de agregar determina ladentro de cada celdilla•^ Los componentes se mantienen de igual tamañofilas y de columnas•^ En el constructor debemos indicar el número de^ •^ Divide al componente en una rejilla (grid)^ GridLayout

27

–Define dos constantes^ •^ Coloca a los componentes a lo largo de un eje.^ BoxLayout

X_AXIS,Y_AXIS

BoxLayout(Container,–El contenedor y la orientación de los componentes^ •^ En el constructor debemos indicar

int)

GridLayout^ –Los componentes no tienen igual tamaño (como en

• Existe la clase

Box para facilitar la construcción

cpane.setLayout(new BoxLayout(this,BoxLayout.X_AXIS))posición (de izda a drcha y de arriba a abajo)• El orden a la hora de agregar determina la–Es un Container

28

– tener su propio gestor de esquemas– incorporar sus propios componentes•^ Este nuevo contenedor intermedio podrá:contenedor intermediolugar de un componente para agregarlo a otro^ •^ Podemos utilizar un contenedor intermedio en^ GUI complejos I

29

...f.getContentPane().add(p,BorderLayout.WEST);...p.add(bp2);p.add(bp1);p.setLayout(new GridLayout(2,1));JButton bp2 = new JButton(“Panel2”);JButton bp1 = new JButton(“Panel1”);JPanel p = new JPanel();f.getContentPane(new BorderLayout()); JFrame f = new JFrame(“Un ejemplo·); GUI Complejos II

GUI03.java Ejercicio: jugar con setVisible

30

VERTICAL_SCROLLBAR_AS_NEEDED – Constantes para control del scrollJScrollPane JScrollPane(JComponent,int,int); JScrollPane JScrollPane(JComponent);– Costructorescontenedor intermedio)^ •^ Permite hacer scroll a un componente (u otro^ JScrollPane I

HORIZONTAL_SCROLLBAR_AS_NEEDED

VERTICAL_SCROLLBAR_ALWAYS

HORIZONTAL_SCROLLBAR_ALWAYS

VERTICAL_SCROLLBAR_NEVER

HORIZONTAL_SCROLLBAR_NEVER

31

public static void main(String [] args)class GUISP {import javax.swing.;^ import java.awt.; JScrollPane II

(^) {

}}frame.setVisible(true); frame.pack(); frame.getContentPane().add(scrollPane); ScrollPane scrollPane = new ScrollPane(label); JLabel label = new JLabel(ii);ImageIcon ii = new ImageIcon("carapin.gif");JFrame frame = new JFrame("Un ejemplo");

32

•Divide una ventana en dos JSplitPane I

  • Movimiento visible o no• Vertical u horizontal

HORIZONTAL_SPLIT^ •ConstantesSplitPane(int, boolean, JComponent, JComponent)^ SplitPane(int, JComponent, JComponent)•Constructores (entre otros)

VERTICAL_SPLIT

setDividerLocation(int); setOneTouchExpandable(boolean);^ •Métodos de instancia

37

pane.add(toolBar,BorderLayout.NORTH);toolBar.add(button);button = new JButton(new ImageIcon("images/right.gif"));toolBar.add(button);button = new JButton(new ImageIcon("images/middle.gif"));toolBar.add(button);button = new JButton(new ImageIcon("images/left.gif"));JButton button = null; JToolBar toolBar = new JToolBar(); JToolBar II

38

Componentes I

JButton^ JComponent

JLabel

AbstractButton

JToggleButton

JMenuItem

JCheckBox

JRadioButton

JRadioButtonItem

JCheckBoxItem

JMenu

... setBackground()setVisible()setEnable()setBorder() setToolTips()

ButtonGroup

39

Componentes II

JTextArea JComponent

JList

JMenuBar

JComboBox

JTextField

JOptionPane

JFileChooser...setBackground()setVisible()setEnable()setBorder()^ setToolTips()

40

• Métodos heredados de Componentes III

JComponent

  • Color (^) getBackground()
  • Graphics– void setBackground(Color) (^) getGraphics()
  • ...– void setBorder()– void repaint()– void paint(Graphics g)– void setVisible(boolean)– void setEnable(boolean)– Toolkit getToolkit()– String getName()

41

• En javax.swing.borders Bordes I

existen una serie

– TitleBorder– SoftBevelBorder– MatteBorder– LineBorder– EtchedBorder– EmptyBorder– CompountBorder– BevelBorder – AbstractBordercomponente. Hay nueve clases:de clases que permiten dar un borde a un

42

– public void^ •^ Para cambiar el borde de un componente^ Bordes II

(^) setBorder(Border)

• La claseb.setBorder(new TitledBorder(“Boton”))JButton b = new JButton(“Aceptar”);

javax.swing.BorderFactory

tiene

b.setBorder(BorderFactory.createTitleBorder(“Boton”)) JButton b = new JButton(“Aceptar”);devuelven el mismo borde.– Múltiples peticiones de crear un mismo bordemétodos de clase para crear bordes

43

...void setText(String) String getText()^ •^ MétodosJButton(Icon)JButton(String,Icon)JButton(String) JButton()•^ Constructores^ •^ Crea botones de pulsación^ JButton

44

LEFT^ Constantes JLabel([String,] [Icon,] [int])•^ Constructores^ •^ Es una etiqueta con una línea de texto.^ JLabel

RIGHT CENTER

...void setText(String) String getText()^ •^ Métodos de instancia

49

String getText(int,int) String getText()^ •^ Métodos JTextField ([String,] [int])•^ Constructores^ •^ Permite editar texto en una línea.^ JTextField

(^) // offset y len

char [] getPassword()^ –^ con un método de instancia JPasswordField^ –^ Tiene una subclase que enmascara el eco (* u otro símbolo)...boolean isEditable()void setEditable(boolean)

50

JTextArea ([String,]•^ Constructores^ •^ Permite editar texto en un area.^ JTextArea

(^) [int,int])

igual quevoid insert(String,int) void append(String)^ •^ Métodos

(^) JTextField

51

Jlist

I

JList()•^ Constructores^ •^ Muestra una lista de elementos para su selección.

JList(Object (^) [])

JList(Vector)

JList(ListModel)

int getSelectedIndex()^ •^ Métodos de instancia

(^) si (^) no hay

void setListData(Vector)void setListData(Object)boolean isSelectionEmpty([])boolean isSelectedIndex(int)Object [] getSelectedValues()Object getSelectedValue()int [] getSelectedIndices()

52

JList

II

ListSelectionModel.MULTIPLE_INTERVAL_SELECTIONListSelectionModel.SINGLE_INTERVAL_SELECTION ListSelectionModel.SINGLE_SELECTION • Constantes...get selectionMode() void setSelectionMode(int) • Métodos de instancia

53

• No está desplegado como • Permite la selección de un item de entre varios. JComboBox

Jlist

JComboBox()^ •^ Constructores

JComboBox(Object [])

JComboBox(Vector) (^) JComboBox(ListModel)

void setEditable(boolean)boolean isEditable()void setSelectedIndex(int)Object getSelectedItem() int getSelectedIndex()^ •^ Métodos de instancia

54

Ejercicio

GUIcomp.java

55

– Para ocultarla setVisible(true)– Se suele crear y no visualizar hasta que sea necesarioFrame^ •^ Es un elemento de visualización al igual que^ JDialog

setVisible(false)

  • Para eliminarla

dispose()

•^ •^ JDialog(Frame, String, boolean)

  • Container getContenPane() new JDialog(f,”Ventana modal”,true);• (^) boolean indica si es modal o no• (^) String, el título (^) Frame es la ventana padre

56

JOptionPane

I

•^ showConfirmDialog(...)•^ Métodos de clasedistintas ventanas de mensajes (modales)^ •^ Clase que contiene métodos de clase para crear

  • (^) Unifica las tres anteriores.^ showOptionDialog(...) • (^) Informa de algo que ha ocurrido^ showMessageDialog(...) • (^) Espera una entrada^ showInputDialog(...) (^) Realiza una pregunta de confirmación como Si, No Cancelar

61

– Barra de Menú (^ •^ Tres elementos básicos^ •^ void setJMenuBar(JMenuBar)•^ Para añadir un menú^ •^ Se pueden añadir a los contenedores superiores^ Menús

JMenuBar

  • Entrada de Menú (

JMenu)

  • Item de entrada ( JMenuItem

y ....)

• El menú de ayuda se añade a un

JMenuBar

(aún

void setHelpMenu(JMenu)no está implementado)

62

– Para añadir a un^ •^ Un item puede ser a su vez un menú^ Menús

(^) JMenuBar (^) una entrada

  • (^) Para añadir a un • void add(JMenu) (^) JMenu

• Un CheckBoxMenuItem• boolean isEnabled() • void setEnabled(boolean) – Para manejar los items y entradas• void addSeparator()• void add(JMenuItem, MenuShortcut)• void add(JMenuItem)

se puede seleccionar

  • void setState(boolean) – boolean getState()

63

Ejemplo de Menú

GUI07.java

64

• La clase KeyEvent

KeyEvent

incluye constantes para

• La clase se encuentra en el paquete– VK_F1, VK_F2,..– VK_A, VK_B,...– VK_1, VK_2,... JMenuItemacelerar las pulsaciones para llegar a un de un

(^) java.awt.event

add(new JMenuItem(“Entrada”,KeyEvent.VK_E));

65

– show(JComponent, intposición de visualización^ •^ Debe activarse en un componente dada una – add(MenuItem)^ •^ Contiene elementos de menu – JPopupMenu()^ •^ Crea menús aislados (en cualquier ventana)^ PopupMenu

x, int y)

66

• Sólo vamos a ver el modelo nuevo(incluso para la librería Swing que añade algo)eventos que se mantiene como definitivo en 1.3• Desde la versión 1.1 incluye el nuevo modelo dediferente • La versión 1.0 incluía un modelo de eventos El Modelo de Eventos

67

java.awt.eventdisparar un evento^ •^ Un componente (o menú componente) puede^ El Modelo de Eventos

javax.swing.event

eventoimplemente cierta interface dependiendo del•^ Cada oyente debe pertenecer a una clase queapropiadaobjetos “oyentes” (listeners) que realizan la acción^ •^ Cuando un evento se dispara, es recogido por

68

• XxxxxListener• El argumento será el objeto oyente • El receptor es el componente que queremos escuchar^ – addXxxxxListener(XxxxxListener)componente sobre el que se registra•^ El registro es realizado a través de un método delcomponente, se debe registrar en él^ •^ Para que un oyente esté pendiente de un^ El Modelo de Eventos

(^) indica la interface que va a implementar

  • Por ejemplo, dado la interface

ActionListener

, un

  • addActionListener(ActionListener)objeto se registra por medio de

73

ActionListener

II

• ver GUIDia.java (uso de Dialog) • ver GUI01c2.java • String getActionCommand() y consultarla desde el oyente • addActionCommand(String) – añadir junto con el registro una acción • Object getSource()– preguntar por quién lo ha activadopuede • Si un oyente está pendiente de varios objetos,

74

• Ejemplo: GUI08.javavoid focusLost(FocusEvent) void focusGained(FocusEvent)foco • Controla cuando un componente gana o pierde el FocusListener

75

– JList– JCheckBoxMenuItem – JCheckBox^ • Se dispara si se pulsa en^ ItemListener

(simple pulsación)

• Puede ser–^ int getStateChanged()–^ Object getItemSelectable()• ItemEvent^ void itemStateChanged(ItemEvent)

(^) ItemEvent.SELECTED (^) o

ItemEvent.DESELECTED

76

• Métodos devoid keyReleased(KeyEvent)void keyPressed(KeyEvent) void keyTyped(KeyEvent)que tiene el foco– Cuando se pulsa o libera una tecla en un componente • Se dispara KeyListener

KeyEvent

documentación^ – Define como constante cualquier pulsación. Ver–^ int getModifiersText(), ...–^ int getKeyChar(), int getKeyCode(),

77

documentación.^ – Define como constante el tipo de pulsación. Ver–^ boolean isPopupTrigger()–^ int getX(), int getY(), Point getPoint()–^ int getClickCount()• MouseEventvoid mouseReleased(MouseEvent)void mousePressed(MouseEvent)void mouseExited(MouseEvent)void mouseEntered(MouseEvent)^ void mouseClicked(MouseEvent)componente (no los movimientos)^ •^ Para actuar con el ratón desde cualquier^ MouseListener

78

• GUI09.java MouseListener

79

– Ejemplo GUI10.javainterfaces – Hereda de ambasjavax.swing.event• MouseInputListenervoid mouseMoved(MouseEvent) void mouseDragged(MouseEvent)desde cualquier componente^ • Para actuar con los movimientos del ratón^ MouseMotionListener

80

– Ejemplo GUI11.java– int getWindow()• WindowEventvoid windowDeactivated(WindowEvent)void windowActivated(WindowEvent)void windowClosed(WindowEvent)void windowDeiconified(WindowEvent)void windowIconified(WindowEvent)void windowOpened(WindowEvent) void windowClosing(Windowvent)^ •^ Controla el movimiento de una ventana (window)^ WindowListener