Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 6
Tema 6
Java
Elementos de Swing
Tecnologa Swing
Componentes y contenedores
JFC
Versin 1.1
AWT
Versin 1.2 en adelante incluyen JFC: SWING
Actualmente, los navegadores no entienden JFC
AWT v SWING
Contenedores superiores I
Problema:
Hay facilidades que algn sistema operativo no tiene
por lo que AWT define lo mnimo comn
Definea lo mximo
Necesita los paquetes (y subpaquetes)
java.awt.* y javax.swing.*
2
Construccin de un GUI.
Pasos a seguir
Contenedores Superiores II
setSize()
setVisible()
Component
Container
pack()
Dialog
setTitle()
JDialog
Window
Panel
Frame
Applet
JApplet
JFrame
getContentPane()
getContentPane()
getContentPane()
5
I. Crear un contenedor
superior
Contenedores Intermedios
Component
add()
setLayout()
Container
JComponent
JPanel
JScrollPane
JSplitPane
JTabbedPane
JToolBar
El orden es importante
contenedor.setLayout(new FlowLayout())
9
11
V. Dimensionar el
contenedor superior I
10
12
V. Dimensionar el
contenedor superior II
Ejemplo GUI
13
import java.awt.*;
import javax.swing.*;
class GUI01 {
public static void main(String [] args) {
JFrame f = new JFrame(Un ejemplo);
Container cpane = f.getContetPane();
cpane.setLayout(new FlowLayout());
JButton bSi = new JButton(SI);
JButton bNo = new JButton(NO);
JLabel l = new JLabel(Nombre);
cpane.add(l);
cpane.add(bSi);
cpane.add(bNo);
f.pack();
f.setVisible(true);
}
}
Ejemplo GUI
java GUI01
14
15
16
Ejemplo GUI
Iconos
GUI01n
O bien
ImageIcon i =
new ImageIcon(c:\\misIconos\\bruja.gif)
17
19
GUI en Swing
Aspecto de la aplicacin
20
Otros aspectos
FlowLayout
Los componentes fluyen de izquierda a derecha y
de arriba a abajo.
Su tamao se ajusta al texto que presentan
Al cambiar el tamao de la ventana, puede
cambiar la disposicin
21
23
Gestores de Esquemas
BorderLayout
FlowLayout
BorderLayout
GridLayout
GridBagLayout
CardLayout (Swing propone alternativa)
BoxLayout (nueva en Swing: javax.swing)
JPanel
add(bSi,BorderLayout.NORTH)
22
24
BorderLayout
BoxLayout
Coloca a los componentes a lo largo de un eje.
Define dos constantes X_AXIS,Y_AXIS
cpane.setLayout(new BoxLayout(this,BoxLayout.X_AXIS))
25
27
GridLayout
GUI complejos I
cpane.setLayout(new GridLayout(2,3))
28
GUI Complejos II
JScrollPane II
import java.awt.*;
import javax.swing.*;
class GUISP {
public static void main(String [] args)
{
JFrame frame = new JFrame("Un ejemplo");
ImageIcon ii = new ImageIcon("carapin.gif");
JLabel label = new JLabel(ii);
ScrollPane scrollPane = new ScrollPane(label);
frame.getContentPane().add(scrollPane);
frame.pack();
frame.setVisible(true);
}
}
31
JScrollPane I
JSplitPane I
Costructores
JScrollPane JScrollPane(JComponent);
JScrollPane JScrollPane(JComponent,int,int);
Constantes
VERTICAL_SCROLLBAR_AS_NEEDED
HORIZONTAL_SCROLLBAR_AS_NEEDED
VERTICAL_SCROLLBAR_ALWAYS
HORIZONTAL_SCROLLBAR_ALWAYS
VERTICAL_SCROLLBAR_NEVER
HORIZONTAL_SCROLLBAR_NEVER
HORIZONTAL_SPLIT
VERTICAL_SPLIT
Mtodos de instancia
setOneTouchExpandable(boolean);
setDividerLocation(int);
30
32
JSplitPane II
JTabbedPane
import java.awt.*;
import javax.swing.*;
class GUISiP {
public static void main(String [] args)
{
jFrame frame = new JFrame("Un ejemplo");
ImageIcon ii = new ImageIcon("carapin.gif");
JLabel label1 = new JLabel(ii);
JLabel label2 = new JLabel("Cara bonita");
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
label1,label2);
splitPane.setOneTouchExpandable(true);
frame.getContentPane().add(splitPane);
frame.pack();
frame.setVisible(true);
}
}
33
JTabbedPane I
35
JToolBar I
JTabbedPane()
JTabbedPane(int)
JToolBar()
JToolBar(int)
Constantes
TOP
BOTTOM
LEFT
RIGHT
// HORIZONTAL
VERTICAL
Mtodos de instancia
Mtodos de instancia
addSeparator()
setFloatable(boolean) // flota por defecto
addTab(String, Component)
addTab(String, Icon, Component)
addTab(String, Icon, Component, String)
setSelectedIndex(int);
34
36
JToolBar II
Componentes II
JComponent
JList
JComboBox
setToolTips()
setBorder()
setEnable()
setVisible()
setBackground()
...
JMenuBar
JOptionPane
JTextArea
JTextField
37
Componentes I
JComponent
setToolTips()
setBorder()
setEnable()
setVisible()
setBackground()
...
JToggleButton
JCheckBox
JButton
JMenuItem
JRadioButton
ButtonGroup
JRadioButtonItem
JCheckBoxItem
39
Componentes III
AbstractButton
JLabel
....
JFileChooser
JMenu
38
Color getBackground()
void setBackground(Color)
Graphics getGraphics()
String getName()
Toolkit getToolkit()
void setEnable(boolean)
void setVisible(boolean)
void paint(Graphics g)
void repaint()
void setBorder()
...
40
10
Bordes I
JButton
Constructores
JButton()
JButton(String)
JButton(String,Icon)
JButton(Icon)
AbstractBorder
BevelBorder
CompountBorder
EmptyBorder
EtchedBorder
LineBorder
MatteBorder
SoftBevelBorder
TitleBorder
Mtodos
String getText()
void setText(String)
...
41
43
Bordes II
JLabel
Constructores
Constantes
LEFT
RIGHT
CENTER
Mtodos de instancia
String getText()
void setText(String)
...
44
11
JCheckBox
import java.awt.*;
import javax.swing.*;
class GUI04 {
public static void main(String [] args) {
JFrame f = new JFrame("Ejemplo de Botones");
Marcadores
Constructores
JCheckBox([String,] [Icon,] [boolean])
Mtodos de instancia
JButton bNorte
JLabel lSur
= new JButton("Norte");
= new JLabel("Este es el Sur",
JLabel.CENTER);
JCheckBox cEste = new JCheckBox("Este",true);
JButton
bCentro= new JButton("Centro");
JRadioButton cp1 = new JRadioButton("RB1");
JRadioButton cp2 = new JRadioButton("RB2",true);
String getText()
void setText(String)
boolean isSelected()
void setSelected(boolean)
...
45
JRadioButtons y
ButtonGroup
47
Botones circulares
Se agrupan de manera que slo uno est pulsado
Constructores
JRadioButtons([String,] [Icon,] [boolean])
Mtodos de instancia
Igual que JCheckBox
Para agruparlos, se crea una instancia de ButtonGroup y se
aaden con add(AbstractButton)
}
}
46
48
12
JTextField
Jlist I
Constructores
JTextField ([String,] [int])
Mtodos
String getText()
String getText(int,int) // offset y len
void setEditable(boolean)
boolean isEditable()
...
Tiene una subclase que enmascara el eco (* u otro smbolo)
JPasswordField
con un mtodo de instancia
char [] getPassword()
JList()
JList(Object [])
JList(Vector)
JList(ListModel)
Mtodos de instancia
int getSelectedIndex() // -1 si no hay
int [] getSelectedIndices()
Object getSelectedValue()
Object [] getSelectedValues()
boolean isSelectedIndex(int)
boolean isSelectionEmpty([])
void setListData(Object)
void setListData(Vector)
49
51
JTextArea
JList II
Mtodos de instancia
void setSelectionMode(int)
get selectionMode()
...
Mtodos
Constantes
void append(String)
void insert(String,int)
igual que JTextField
...
ListSelectionModel.SINGLE_SELECTION
ListSelectionModel.SINGLE_INTERVAL_SELECTION
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
50
52
13
JComboBox
JDialog
Constructores
JComboBox()
JComboBox(Vector)
JComboBox(Object [])
JComboBox(ListModel)
Mtodos de instancia
int getSelectedIndex()
Object getSelectedItem()
void setSelectedIndex(int)
boolean isEditable()
void setEditable(boolean)
Container getContenPane()
53
55
JOptionPane I
Ejercicio
showInputDialog(...)
Espera una entrada
showMessageDialog(...)
Informa de algo que ha ocurrido
GUIcomp.java
showOptionDialog(...)
54
56
14
JOptionPane II
JOptionPane IV
showConfirmDialog(Component padre,
Object mensaje,
String title,
int optionType,
int tipoOpcion
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE QUESTION_MESSAGE
PLAIN_MESSAGE
int tipoMensaje
DEFAULT_OPTION
YES_NO_CANCEL_OPTION
Icon icono
Object [] opciones
Object valorInicial
YES_NO_OPTION
OK_CANCEL_OPTION
int messageType,
Icon icon)
57
JOptionPane.showConfirmDialog(
null,
Esta seguro",
Ventana de Seguridad",
JOptionPane.YES_NO_OPTION);
JOptionPane III
JFileChooser
YES_OPTION
NO_OPTION
CANCEL_OPTION
OK_OPTION
CLOSED_OPTION
59
// path
Mtodos de instancia
int showOpenDialog(Component)
int showCloseDialog(Component)
File
getSelectedFile()
File [] getSelectedFiles()
58
60
15
Mens
Ejemplo de Men
GUI07.java
void setHelpMenu(JMenu)
61
63
Mens
KeyEvent
VK_1, VK_2,...
VK_A, VK_B,...
VK_F1, VK_F2,..
void add(JMenuItem)
void add(JMenuItem, MenuShortcut)
void addSeparator()
64
16
PopupMenu
El Modelo de Eventos
JPopupMenu()
java.awt.event
javax.swing.event
add(MenuItem)
65
67
El Modelo de Eventos
El Modelo de Eventos
68
17
Interfaces en
java.awt.event I
Interfaces
ActionListener
Mtodos
actionPerformed(ActionEvent)
AdjustmentListener
adjustmentValueChanged(AdjustementEvent)
ComponentListener
componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
componentShown(ComponentEvent)
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener
focusGained(FocusEvent)
focusLost(FocusEvent)
ItemListener
itemStateChanged(ItemEvent)
KeyListener
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
Eventos
Los eventos se implementan como subclases de
java.util.EventObject
Object getSource()
Interfaces
Evento
javax.swing.event
XxxxxListener
EventXxxxx
addXxxxxListener(XxxxxListener)
EventXxxxx
69
71
Interfaces en
java.awt.event II
ActionListener I
Interfaces
MouseListener
Se lanza si:
Mtodos
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
MouseMotionListener mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
TextListener
textValueChanged(TextEvent)
void actionPerformed(ActionEvent)
WindowListener
windowActivated(WindowEvent)
windowClosed(WindowEvent)
windowClosing(WindowEvent)
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent)
windowIconified(WindowEvent)
windowOpened(WindowEvent)
Ejemplos:
GUI01c.java
El oyente es la propia ventana
y GUI01c1.java
70
72
18
ActionListener II
ItemListener
Se dispara si se pulsa en
JCheckBox
JCheckBoxMenuItem
JList (simple pulsacin)
void itemStateChanged(ItemEvent)
addActionCommand(String)
ItemEvent
Object getItemSelectable()
int getStateChanged()
ver GUI01c2.java
ver GUIDia.java (uso de Dialog)
75
FocusListener
KeyListener
Se dispara
Cuando se pulsa o libera una tecla en un componente
que tiene el foco
void focusGained(FocusEvent)
void focusLost(FocusEvent)
void keyTyped(KeyEvent)
Ejemplo: GUI08.java
void keyPressed(KeyEvent)
void keyReleased(KeyEvent)
Mtodos de KeyEvent
int getKeyChar(), int getKeyCode(),
int getModifiersText(), ...
76
19
MouseListener
MouseMotionListener
void
void
void
void
void
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
void mouseDragged(MouseEvent)
void mouseMoved(MouseEvent)
MouseInputListener
javax.swing.event
MouseEvent
Hereda de ambas
int getClickCount()
int getX(), int getY(), Point getPoint()
boolean isPopupTrigger()
interfaces
Ejemplo GUI10.java
79
MouseListener
WindowListener
GUI09.java
WindowEvent
int getWindow()
Ejemplo GUI11.java
78
80
20
Adaptadores
Ver GUI12a.java
81
83
Adaptadores
La clase Graphics I
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener
FocusAdapter
KeyListener
KeyAdapter
MouseListener
MouseAdapter
MouseMotionListenerMouseMotionAdapter
WindowListener
WindowAdapter
84
21
La clase Graphics II
paintComponent(Graphics)
Invocado por el sistema cada vez que necesita pintar
Si se redefine, se debe llamar primero al mismo mtodo del
super para que pinte el fondo.
repaint()
repaint(int x, int y, int w, int h)
translate(int, int)
85
87
Ejemplo
Para pintar un crculo enviar al objeto Graphics
el mensaje drawOval(int x,int y,int rx,int ry)
Inicialmente es drawOval(60,60,20,20)
crece
Incrementa el radio en 10
decrece
Decrementa el radio en 10
Se cierra correctamente
86
GUIad.java y
GUIada.java
88
22
La clase Graphics IV
Applets I
drawString(String,int,int)
Cambio de fuentes
setFont(Font)
91
La clase Graphics V
Applets II
Certificados
public class SimpleApplet extends JApplets {
public void init() {
JLabel label = new JLabel("Hola mundo");
getContentPane().add(label, BorderLayout.CENTER);
}
}
Ver Imagen.java
90
92
23
Arrancar un Applets
Ejemplo de applets
Ejercicio: LanzaPinta.html
<applet codebase=. code=PintaParam.class width=300 height=200>
<param name= figura1 value= circulo-verde-100-100-45>
<param name= figura2 value= circulo-rojo-0-90-90>
<param name= figura3 value= rectangulo-azul-20-20-80-90>
<param name= figura4 value= linea-amarillo-0-0-200-200>
</applet>
donde
codebase
code
width
height
aling
93
Applets
95
URL getDocumentBase()
URL getCodeBase()
Directorio del cdigo fuente del applet
En el fichero .html
< applet code = laClase.class
archive = misClases.jar
width = 300 height = 150>
</applet>
96
24