Cursojava 5
Cursojava 5
TEMA 5
Programacin Grfica. Swing: Componentes
Componentes Swing
Una interface grfica est construida en base a elementos grficos bsicos, los
Componentes. Tpicos ejemplos de estos Componentes son los botones, barras de
desplazamiento, etiquetas, listas, cajas de seleccin o campos de texto. Los
Componentes permiten al usuario interactuar con la aplicacin y proporcionar
informacin desde el programa al usuario sobre el estado del programa. Todos los
Componentes de la interface de usuario son instancias de la clase Component o uno
de sus subtipos.
Etiquetas: JLabel
De todos los componentes de interfaz de usuario que proporciona Java, las
etiquetas son, sin lugar a duda, los ms sencillos. Las etiquetas se utilizan para
situar fragmentos de text o o imgenes en la pantalla, de manera que su uso ms
comn es dar ttulo a otras reas o a otros componentes Swing.
Las etiquetas presentan 3 formas de alineamiento:
Pg. 1 - 54
Curso de Java
Pg. 2 - 54
Curso de Java
Mtodos Constructores
Mtodos
Crea una etiqueta.
JLabel()
JLabel(Icon)
JLabel(Icon,int)
JLabel(String)
JLabel(String,int)
JLabel(String,Icon,int)
Descripcin
Principales Mtodos
Mtodos
void setText(String)
String getText()
void setIcon(Icon)
Icon getIcon()
void setHorizontalAlignment(int)
void setVerticalAlignment(int)
int getHorizontalAlignment()
int getVerticalAlignment()
void setHorizontalTextPosition(int)
void setVerticalTextPosition(int)
int getHorizontalTextPosition()
int getVerticalTextPosition()
Descripcin
Establece y obtiene, respectivamente, el
texto de la etiqueta.
Establece y obtiene, respectivamente, la
imagen de la etiqueta.
Establece y obtiene, respectivamente, la
posicin horizontal y vertical de el
contenido de la etiqueta. Los posibles
valores horizontales son: LEFT (por
defecto, para etiquetas con slo texto),
CENTER (por defecto, para etiquetas con
slo imagen) y RIGHT.
Los posibles valores verticales son: TOP,
CENTER (por defecto), y BOTTOM.
Establece y obtiene, respectivamente, la
posicin horizontal y vertical del texto
contenido en la etiqueta respecto de la
imagen. Los posibles valores
horizontales son: LEFT, CENTER y
RIGHT (por defecto). Los posibles valores
verticales son: TOP, CENTER (por
defecto) y BOTTOM.
Pg. 3 - 54
Curso de Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ejemploJRadioButton1 extends JFrame
implements ActionListener{
public ejemploJRadioButton1(String titulo) {
//Creacin de los RadioButtons
JRadioButton boton1 =
new JRadioButton("Slo texto");
boton1.setMnemonic(KeyEvent.VK_B);
boton1.setActionCommand("BOTON1");
boton1.setSelected(true);
JRadioButton boton2 = new JRadioButton(
new ImageIcon("images/Cat.gif"));
boton2.setMnemonic(KeyEvent.VK_C);
boton2.setActionCommand("BOTON2");
JRadioButton boton3 = new JRadioButton("Texto e Imagen",
new ImageIcon("images/Dog.gif"));
boton3.setMnemonic(KeyEvent.VK_D);
boton3.setActionCommand("BOTON3");
//Definiendo escuchadores de eventos
boton1.addActionListener(this);
boton2.addActionListener(this);
boton3.addActionListener(this);
getContentPane().add(boton1,BorderLayout.NORTH);
getContentPane().add(boton2,BorderLayout.CENTER);
getContentPane().add(boton3,BorderLayout.SOUTH);
pack();
setTitle(titulo);
...
Pg. 4 - 54
Curso de Java
...
public void actionPerformed(ActionEvent e)
{System.out.println("Evento producido por " + e.getActionCommand());}
public static void main (String[] args) {
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
JFrame frame = new ejemploJRadioButton1("Curso de Java: JRadioButton");
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
Mtodos constructores
Mtodos
JRadioButton()
JRadioButton(Action)
JRadioButton(String)
Descripcin
Crea un JRadioButton sin texto y no seleccionado.
Crea un RadioButton especificando el escuchador
de eventos que tendr asociado.
Crea un RadioButton con un texto determinado.
JRadioButton(String,
boolean)
JRadioButton(Icon)
JRadioButton(Icon,
boolean)
JRadioButton(String, Icon)
JRadioButton(String, Icon,
boolean)
Pg. 5 - 54
Curso de Java
Principales mtodos
ButtonGroup
Esta clase se usa para crear un conjunto de botones con exclusin entre ellos, es
decir, cuando se seleccione un botn, todos los dems se deseleccionarn
automticamente.
Este componente pude usarse con cualquier
conjunto de objetos herede de la clase
AbstractButton. Normalmente se utiliza para
instancias
de
JRadioButton.
JRadioButtonMenuItem o JToggleButton. No
se
podr
utilizar
con
instancias
de
componentes como JButton o JMenuItem ya
que stos no implementan ningn mtodo
para obtener su estado de seleccin (si est o
no seleccionado).
Inicialmente todos los botones en un grupo no estn seleccionados. Una vez que se
seleccione uno, a partir de ah, siempre habr uno de ellos seleccionado.
...
//Define un grupo de RadioButtons
ButtonGroup group = new ButtonGroup();
group.add(birdButton);
group.add(catButton);
group.add(dogButton);
group.add(rabbitButton);
group.add(pigButton);
...
// Coloca los RadioButtons dentro de un panel para aadirlo a la ventana
JPanel radioPanel = new JPanel();
radioPanel.setLayout(new GridLayout(0, 1));
radioPanel.add(birdButton);
radioPanel.add(catButton);
radioPanel.add(dogButton);
radioPanel.add(rabbitButton);
radioPanel.add(pigButto n);
...
//Por ltimo aade el panel a la ventana que ser visible
getContentPane().add(radioPanel,BorderLayout.WEST);
getContentPane().add(picture,BorderLayout.CENTER);
...
Pg. 6 - 54
Curso de Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ejemploJCheckBox extends JFrame implements ItemListener {
JCheckBox chinButton;
JCheckBox glassesButton;
JCheckBox hairButton;
JCheckBox teethButton;
StringBuffer choices;
JLabel pictureLabel;
public ejemploJCheckBox(String titulo) {
//Crea los checkbox
chinButton = new JCheckBox("Barbilla");
chinButton.setMnemonic(KeyEvent.VK_B);
chinButton.setSelected(true);
glassesButton = new JCheckBox("Gafas");
glassesButton.setMnemonic(KeyEvent.VK_G);
glassesButton.setSelected(true);
hairButton = new JCheckBox("Pelo");
hairButton.setMnemonic(KeyEvent.VK_P);
hairButton.setSelected(true);
teethButton = new JCheckBox("Dientes");
teethButton.setMnemonic(KeyEvent.VK_D);
teethButton.setSelected(true);
...
Pg. 7 - 54
Curso de Java
...
//Registro de un escuchador para los eventos de los checkbox.
chinButton.addItemListener(this);
glassesButton.addItemListener(this);
hairButton.addItemListener(this);
teethButton.addItemListener(this);
choices = new StringBuffer("cght");
//Crea una etiqueta para cargar la imagen
pictureLabel = new JLabel();
pictureLabel.setFont(pictureLabel.getFont().deriveFont(Font.ITALIC));
updatePicture();
//Coloca los checkbox en un panel
JPanel checkPanel = new JPanel(new GridLayout(0, 1));
checkPanel.add(chinButton);
checkPanel.add(glassesButton);
checkPanel.add(hairButton);
checkPanel.add(teethButton);
getContentPane().add(checkPanel, BorderLayout.WEST);
getContentPane().add(pictureLabel, BorderLayout.EAST);
pack();
setTitle(titulo);
}
/** Escuchando los eventos de los checkbox. */
public void itemStateChanged(ItemEvent e) {
int index = 0;
char c = '-';
Object source = e.getItemSelectable();
if (source == chinButton) {
index = 0;
c = 'c';
} else if (source == glassesButton) {
index = 1;
c = 'g';
} else if (source == hairButton) {
index = 2;
c = 'h';
} else if (source == teethButton) {
index = 3;
c = 't';
}
//Ahora que sabemos qu botn se ha pulsado,
//ver si estaba activado o desactivado cuando se ha pulsado
if (e.getStateChange() == ItemEvent.DESELECTED) {
c = '-';
}
//Aplica los cambios al string
choices.setCharAt(index, c);
updatePicture();
}
...
Pg. 8 - 54
Curso de Java
...
protected void updatePicture() {
//Actualiza el icono de la etiqueta
ImageIcon icon = createImageIcon(
"images/checkbox/geek-"
+ choices.toString()
+ ".gif");
pictureLabel.setIcon(icon);
pictureLabel.setToolTipText(choices.toString());
if (icon == null) {
pictureLabel.setText("Imagen perdida");
} else {
pictureLabel.setText(null);
}
}
/** Devuelve un ImageIcon, o null si el path no es vlido*/
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = ejemploJCheckBox.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public static void main(String[] args) {
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
JFrame frame = new ejemploJCheckBox("Curso de Java: JCheckBox");
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
}
Ejemplo 5.4: Uso de JCheckBox en Java
Mtodos constructores
Mtodos
JCheckBox ()
JCheckBox(String)
Descripcin
Crea un objeto JCheckBox.
Crea un objeto JCheckBox que muestra el
texto especificado en el argumento.
Pg. 9 - 54
Curso de Java
JCheckBox(Icon)
JCheckBox(String,boolean)
JCheckBox(Icon, boolean)
JCheckBox(String,Icon)
JCheckBox(String,Icon,boolean)
Principales mtodos
Pg. 10 - 54
Curso de Java
pack();
setTitle(titulo);
Pg. 11 - 54
Curso de Java
Mtodos Constructores
Mtodos
JComboBox(Vector)
Descripcin
Crea un ComboBox con la lista indicada.
Crea un ComboBox con la lista indicada.
JComboBox(Object[])
JComboBox(ComboBoxModel)
Pg. 12 - 54
Curso de Java
Principales Mtodos
Mtodos
Descripcin
Aade e inserta, respectivamente, un
item en la lista.
void addItem(Object)
void insertItemAt(Object,int)
Object getItemAt(int)
Object getSelectedItem()
int getItemCount()
void removeItemAt(int)
void removeItem(Object)
void removeAllItems()
void setEditable(boolean)
boolean isEditable()
void setModel(ComboBoxModel)
ComboBoxModel getModel()
void setEditor(ComboBoxEditor)
ComboBoxEditor getEditor()
void setRenderer(ListCellRenderer)
ListCellRenderer getRe nderer()
Botones: JButton
A la hora de crear un botn swing debemos instanciar un elemento de la clase
JButton, que a su vez es subclase de AbstractButton. Esta ltima clase, es
superclase de algunos elementos swing que vamos a ver con posterioridad:
AbstractButton
JButton
JCheckBox
JRadioButton
JMenuItem
Pg. 13 - 54
Curso de Java
Los botones swing son, sin lugar a dudas, ms completos que los botones utilizados
por AWT. Prueba de ello, es que pueden incluir tanto imgenes como texto,
podemos utilizar mnemnicos o teclas alternativas para pulsarles...etc. Los
mnemnicos o teclas alternativas se denominan tambin teclas aceleradoras,
debido a que se utilizan cuando se quiere hacer clic en un botn sin utilizar el ratn,
pulsando simplemente la tecla concreta del teclado, ahorrando con ello tiempo.
El aspecto de una serie de botones swing podra ser el siguiente:
Mtodos Constructores
Mtodos
Descripcin
Crea un objeto JButton vaco.
JButton()
JButton(String)
JButton(Icon)
JButton(String,Icon)
Principales Mtodos
Mtodos
void setMnemonic(char)
char getMnemonic()
void setActionCommand(String)
String getActionCommand(void)
void setSelected(boolean)
boolean isSelected()
Descripcin
Establece y obtiene, respectivamente, la
tecla alternativa para pulsar el botn.
Establece y obtiene, respectivamente, el
nombre de la accin realizada por el botn.
Establece y obtiene, respectivamente, si el
bot est o no seleccionado.
Pg. 14 - 54
Curso de Java
void doClick()
void doClick(int)
void addActionListener(ActionListener)
ActionListener removeActionListener()
void addItemListener(ItemListener)
ItemListener removeItemListener()
void setText(String)
String getText()
void setIcon(Icon)
Icon getIcon()
void setPressedIcon(Icon)
Icon getPressedIcon()
void setDisabledIcon(Icon)
Icon getDisabledIcon()
void setSelectedIcon(Icon)
Icon getSelectedIcon()
void setDisabledSelectedIcon(Icon)
Icon getDisabledSelectedIcon()
void setRolloverEnabled(boolean)
boolean getRolloverEnabled()
void setRolloverIcon(Icon)
Icon getRolloverIcon()
void setRolloverSelectedIcon(Icon)
Icon getRolloverSelectedIcon()
- Horizontal: AbstractButton.LEFT
AbstractButton.CENTER
AbstractButton.RIGHT
- Vertical: AbstractButton.TOP
AbstractButton.CENTER
AbstractButton.BOTTOM
void setHorizontalAlignment(int)
void setVerticalAlignment(int)
int getHorizontalAlignment()
Jess Cceres Tello
Curso de Java
int getVerticalAlignment()
void setMargin(Insets)
Insets getMargin()
void setBorderPainted(boolean)
boolean isBorderPainted()
import
import
import
import
import
import
Pg. 16 - 54
Curso de Java
...
public void actionPerformed (ActionEvent e) {
if (e.getActionCommand().equals("izquierda")) {
button1.setEnabled(false);
button3.setEnabled(true);
}
if (e.getActionCommand().equals("derecha")) {
button1.setEnabled(true);
button3.setEnabled(false);
}
}
public static void main (String[] args) {
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
JFrame frame = new ejemploJButton("Curso de Java: JButton");
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
Si nos fijamos, el rea que muestra los mensajes, es editable, es decir, el usuario
puede situarse en este componente y escribir o borrar su contenido. Tambin se
podra hacer que este rea de visualizacin de mensajes sea no editable evitando
esta posibilidad.
Jess Cceres Tello
Pg. 17 - 54
Curso de Java
miarea.setEditable(false);
Mtodos Constructores
Descripcin
JTextArea()
JTextArea(int,int)
JTextArea(String)
Mtodos
Descripcin
JTextField()
JTextField(String)
JTextField(int)
JTextField(String,int)
Pg. 18 - 54
Curso de Java
Principales Mtodos
Descripcin
Establece y obtiene, respectivamente, el texto
mostrado en el rea de texto swing.
Establece y obtiene, respectivamente, si el rea de
texto swing es editable.
Establece y obtiene, respectivamente, el color del
texto del rea de texto swing.
Establece y obtiene, respectivamente, el color de
fondo del rea de texto swing.
Establece y obtiene la fuente utilizada en el rea de
texto.
Devuelve el nmero de filas del rea de texto swing.
Devuelve el nmero de columnas del rea de texto
swing.
Mtodos
Descripcin
void setText(String)
String getText()
void setColumns(int)
int getColumns()
void setEditable(boolean)
boolean isEditable()
void setForeground(Color)
Color getForeground()
void setBackground(Color)
Color getBackground()
void setFont(Font)
Font getFont()
void setHorizontalAlignment(int)
int getHorizontalAlignment()
Pg. 19 - 54
Curso de Java
Pg. 20 - 54
Curso de Java
Mtodos Constructores
Mtodos
JPasswordField()
JPasswordField(int)
Descripcin
Crea un campo de texto para passwords.
Crea un campo de texto para passwords con el
nmero de columnas especificadas.
Principales mtodos
Mtodos
Descripcin
char getEchoChar()
setEchoChar(char c)
boolean echoCharIsSet()
char[] getPassword()
Pg. 21 - 54
Curso de Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ejemploJPasswordField extends JFrame {
private JTextField text1, text2, text3;
private JPasswordField password;
public ejemploJPasswordField() {
super( "Curso de Java: JTextField y JPasswordField" );
Container c = getContentPane();
// construccin de textfield de tamao fijo
text1 = new JTextField( 10 );
c.add( text1, BorderLayout.WEST );
// construccin de textfield con texto fijo
text2 = new JTextField( "Inserte un texto" );
c.add( text2, BorderLayout.EAST );
// construccin de textfield con texto fijo de 20
//elementos visibles y ningn evento a la vista.
text3 = new JTextField( "JTextField no editable", 20 );
text3.setEditable( false );
c.add( text3, BorderLayout.SOUTH );
// construccin de textfield texto fijo
password = new JPasswordField( "Texto Oculto" );
c.add( password, BorderLayout.CENTER );
TextFieldTrato tra = new TextFieldTrato();
text1.addActionListener( tra );
text2.addActionListener( tra );
text3.addActionListener( tra );
password.addActionListener( tra );
pack();
setVisible(true);
...
Pg. 22 - 54
Curso de Java
...
// clase interna para tratar los eventos
private class TextFieldTrato implements ActionListener {
public void actionPerformed( ActionEvent e ) {
String s = "";
if ( e.getSource() == text1 )
s = "text1: " + e.getActionCommand();
else if ( e.getSource() == text2 )
s = "text2: " + e.getActionCommand();
else if ( e.getSource() == text3 )
s = "text3: " + e.getActionCommand();
else if ( e.getSource() == password ) {
JPasswordField pwd =(JPasswordField) e.getSource();
s = "password: " + new String( pwd.getPassword() );
}
JOptionPane.showMessageDialog( null, s );
}
}
Pg. 23 - 54
Curso de Java
Por esta razn, Swing permite al programador incorporar marcas que ayuden al
usuario a saber el punto que est seleccionando.
Existen dos clases de marcas:
El programador puede fijar solo las marcas mayores, solo las menores o ambas al
mismo tiempo. Una vez fijadas las marcas, se debe indicar que han de ser
mostradas. Esto se har mediante los mtodos setPaintTicks(true) y
setPaintLabels(true). Se han de incluir ambos mtodos, ya que si nicamente
incluimos el primero las marcas no sern mostradas.
El aspecto de un slider con marcas sera el siguiente:
Pg. 24 - 54
Curso de Java
setMajorTickSpacing(25)
...
mislider=new JSlider(); // creamos el slider
micampo= new JTextField(); //creamos la etiqueta
mislider.setOrientation(JSlider.VERTICAL); // establecemos la orientacin del slider
mislider.setMinimum(0); // valor mnimo que puede tomar el slider
mislider.setMaximum(100); // valor mximo que puede tomar el slider
mislider.setValue(1); // valor inicial que toma el slider
// creamos la tabla y aadimos los elementos
Dictionary mitabla=new Hashtable();
mitabla.put(new Integer(0), new JLabel(" 0%"));
mitabla.put(new Integer(25), new JLabel(" 25%"));
mitabla.put(new Integer(50), new JLabel(" El medio (50%)"));
mitabla.put(new Integer(75), new JLabel(" 75%"));
mitabla.put(new Integer(100), new JLabel(" 100%"));
mislider.setLabelTable(mitabla); // asociamos el slider con la tabla hash
mislider.setPaintLabels(true); //muestra las etiquetas numricas
...
Ejemplo 5.11: Cdigo necesario para la creacin de un JSlider vertical con etiquetas
personalizadas
Pg. 25 - 54
Curso de Java
...
// creamos la tabla
Dictionary mitabla=new Hashtable(); // creamos la tabla hash y aadimos los
elementos
mitabla.put(new Integer(0), new JLabel(imagen1));
mitabla.put(new Integer(25), new JLabel(imagen2));
mitabla.put(new Integer(50), new JLabel(imagen3));
mitabla.put(new Integer(75), new JLabel(imagen4));
mitabla.put(new Integer(100), new JLabel(imagen5));
mislider.setLabelTable(mitabla); // asociamos el slider con la tabla hash
mislider.setPaintLabels(true); //muestra las etiquetas numricas
...
Ejemplo 5.12: Personalizacin del slider mediante imgenes de tipo ImageIcon
Mtodos constructores
Mtodos
Descripcin
JSlider()
JSlider(int orient,
int min,
int max,
int valor)
Pg. 26 - 54
Curso de Java
Principales Mtodos
Mtodos
void setOrientation(int)
int getOrientation()
void setMinimum(int)
int getMinimum()
void setMaximum(int)
int getMaximum()
void setValue(int)
int getValue()
void setMinorTickSpacing(int)
int getMinorTickSpacing()
void setMajorTickSpacing(int)
int getMinorTickSpacing()
void setPaintTicks (boolean)
boolean getPaintTicks()
void setLabelTable(Dictionary)
Dictionary getLabelTable()
void setPaintLabels(boolean)
boolean getPaintLabels()
Descripcin
Establece y obtiene, respectivamente, la
orientacin del slider.
Establece y obtiene, respectivamente, el valor
mnimo que puede tomar el slider.
Establece y obtiene, respectivamente, el valor
mximo que puede tomar el slider.
Establece y obtiene, respectivamente, el valor
actual del slider.
Establece y obtiene, respectivamente, el
rango de marcas menores.
Establece y obtiene, respectivamente, el
rango de marcas mayores.
Establece y obtiene, respectivamente, si se
dibujan las marcas en el slider.
Establece y obtiene, respectivamente, las
etiquetas para el slider.
Establece y obtiene, respectivamente, si se
dibujan las etiquetas para el slider.
Tablas: JTable
Las tablas en Java no almacenan datos, tan slo sirven para mostrar una
determinada informacin.
Un JTable es un componente visual de java que nos permite dibujar una tabla, de
forma que en cada fila/columna de la tabla podamos poner el dato que se desee;
un nombre, un apellido, una edad, un nmero, etc.
Pg. 27 - 54
Curso de Java
Pg. 28 - 54
Curso de Java
AUTO_RESIZE_NEXT_COLUMN:
ajusta
nicamente
inmediatas a la izquierda y derecha del punto de arrastre.
las
columnas
Los editores de celdas son los encargados del control de la edicin en una celda, es
decir, cuando el usuario empieza a editar los datos en una celda, el editor de celdas
toma el control de dicha edicin.
Las columnas de una tabla (las celdas pertenecientes a una misma columna
contienen siempre el mismo tipo de datos) poseen un editor de celdas por defecto.
Jess Cceres Tello
Pg. 29 - 54
Curso de Java
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class ejemploTablas1 extends JFrame {
public ejemploTablas1() {
super("Una Tabla");
String[][] datos = {{"Pepe", "2.9"},{"Luis", "7.4"},{"Andres", "5.0"}};
String[] titulos = {"Nombre", "Nota"};
dsfdf
}
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class ejemploTablas2 extends JFrame {
public ejemploTablas2() {
super("Curso de Java: Tabla con AbstractTableModel");
TableModel tm = new AbstractTableModel() {
String[][] datos = {{"Pepe", "2.9"}, {"Luis", "7.4"},{"Andres", "5.0"}};
String[] titulos = {"Nombre", "Nota"};
};
Ejemplo 5.13: Ejemplos de utilizacin del componente JTable con y sin el modelo de tabla
AbstractTableModel
Pg. 30 - 54
Curso de Java
Mens
En Swing los mens estn mejor desarrollados y son ms flexibles que otros
componentes. Su sintaxis es la misma que en AWT, y el inconveniente es que no
hay ningn mtodo para disear mens, todo es fruto de la codificacin del
programador por lo que a veces el resultado es un cdigo demasiado largo y no tan
claro como nos gustara.
A la hora de crear un men se realizar de la siguiente manera:
Pg. 31 - 54
Curso de Java
JMenuItem
Este es uno de los componentes con los cuales se crean los mens en Swing. El
JMenuItem, esencialmente, se podr crear de dos formas:
-
Swing tambin ofrece la posibilidad de configurar una tecla alternativa para cada
uno de sus componentes.
Veamos un ejemplo de JMenuItem.
...
/*****JMenuBar*****/
menuBar = new JMenuBar();
fileMenu = new JMenu("Archivo");
newMenu = new JMenuItem("Nuevo");
openMenu = new JMenuItem("Abrir");
saveMenu = new JMenuItem("Guardar");
exitMenu = new JMenuItem("Salir");
//Agrega los items al menu
fileMenu.add(newMenu);
fileMenu.add(openMenu);
fileMenu.add(saveMenu);
fileMenu.addSeparator();
fileMenu.add(exitMenu);
//Agrega el menu a la barra de menu
menuBar.add(fileMenu);
//Setea esa bara de menu para el frame
this.setJMenuBar(menuBar);
...
Al igual que los siguientes, estas clases heredan las caractersticas de JMenuItem,
es decir, bsicamente los componentes con los que se construyen los mens. En
este caso existe una ligera diferencia, el componente que se va a insertar en el
men no es un simple item, es un componente de tipo checkbox. De esta forma, se
podr insertar desde simples estructuras checkbox hasta conjunto de ellas con las
caractersticas que se quieran dar.
Pg. 32 - 54
Curso de Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
* Ejemplo de un JMenu con JCheckBoxMenuItem
*/
public class ejemploJCheckBoxMenuItem extends JFrame
implements ActionListener, ItemListener {
JTextArea output;
JScrollPane scrollPane;
String nuevalinea = "\n";
public ejemploJCheckBoxMenuItem() {
JMenuBar menuBar;
JMenu menu;
JMenuItem menuItem;
JCheckBoxMenuItem cbMenuItem;
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//Aade componentes a la ventana utilizando por defecto el layout manager BorderLayout.
Container contentPane = getContentPane();
output = new JTextArea(5, 30);
output.setEditable(false);
scrollPane = new JScrollPane(output);
contentPane.add(scrollPane, BorderLayout.CENTER);
//Crea la barra de menu
menuBar = new JMenuBar();
setJMenuBar(menuBar);
//Construye el primer menu
menu = new JMenu("El Menu");
menu.setMnemonic(KeyEvent.VK_E);
menu.getAccessibleContext().setAccessibleDescription(
"Este es el nico men en el programa que tiene menuItems");
menuBar.add(menu);
//Construye un grupo de menu items del tipo check box
menu.addSeparator();
cbMenuItem = new JCheckBoxMenuItem("Un JMenItem tipo checkbox");
cbMenuItem.setMnemonic(KeyEvent.VK_U);
cbMenuItem.addItemListener(this);
menu.add(cbMenuItem);
cbMenuItem = new JCheckBoxMenuItem("Otro");
cbMenuItem.setMnemonic(KeyEvent.VK_O);
cbMenuItem.addItemListener(this);
menu.add(cbMenuItem);
}
...
Pg. 33 - 54
Curso de Java
...
public void actionPerformed(ActionEvent e) {
JMenuItem source = (JMenuItem)(e.getSource());
String s = "Action event detectado."
+ nuevalinea
+ " EVENTO ORIGEN: " + source.getText()
+ " (una instacia de " + getClassName(source) + ")";
output.append(s + nuevalinea);
}
public void itemStateChanged(ItemEvent e) {
JMenuItem source = (JMenuItem)(e.getSource());
String s = "Item event detectado."
+ nuevalinea
+ " EVENTO ORIGEN: " + source.getText()
+ " (una instancia de " + getClassName(source) + ")"
+ nuevalinea
+ " NUEVO ESTADO: "
+ ((e.getStateChange() == ItemEvent.SELECTED) ?
"seleccionado":"NO seleccionado");
output.append(s + nuevalinea);
}
// Devuelve el nombre de la clase
protected String getClassName(Object o) {
String classString = o.getClass().getName();
int dotI ndex = classString.lastIndexOf(".");
return classString.substring(dotIndex+1);
}
public static void main(String[] args) {
ejemploJCheckBoxMenuItem window = new ejemploJCheckBoxMenuItem();
window.setTitle("Curso de Java: JMe nuCheckBoxItem");
window.setSize(450, 260);
window.setVisible(true);
}
}
FileChooser
Esta clase proporciona un UI para elegir un fichero de una lista. Un selector de
ficheros es un componente que podemos situar en cualquier lugar del GUI de
nuestro programa. Sin embargo, normalmente los programas los muestran en
dilogos modales porque las operaciones con ficheros son sensibles a los cambios
dentro del programa. La clase JFileChooser hace sencillo traer un dilogo modal
que contiene un selector de ficheros.
Pg. 34 - 54
Curso de Java
Para presentar una lista de ficheros que pueden ser abiertos por la
aplicacin.
Para permitir que el usuario seleccione o introduzca el nombre de un fichero
a grabar.
Pg. 35 - 54
Curso de Java
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//Aqu es donde se abrira el fichero
log.append("Abriendo: " + file.getName() + "." + newline);
} else {
log.append("Cancelada la opcin de abrir..." + newline);
}
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//Aqu es donde se guardara el fichero
log.append("Saving: " + file.getName() + "." + newline);
} else {
log.append("Cancelada la opcin de guardar..." + newline);
}
Pg. 36 - 54
Curso de Java
Mtodos constructores
Mtodos
JFileChooser()
JFileChooser(File, FileSystemView)
JFileChooser(File)
JFileChoose r(FileSystemView)
JFileChooser(String, FileSystemView)
JFileChooser(String)
Descripcin
Pg. 37 - 54
Curso de Java
Principales mtodos
Mtodos
Descripcin
int showOpenDialog(Component)
int showSaveDialog(Component)
int showDialog(Component, String)
void setCurrentDirectory(File)
File getCurrentDirectory
void changeToParentDirectory()
void rescanCurrentDirectory()
void setFileSelectionMode(int)
int getFileSelectionMode()
boolean isDirectorySelectionE nabled()
boolean isFileSelectionEnabled()
void setMultiSelectionEnabled(boolean)
boolean isMultiSelectionEnabled()
void setSelectedFile(File)
File getSelectedFile()
void setSelectedFiles(File[])
File[] getSelectedFiles()
Pg. 38 - 54
Curso de Java
Ejemplo 5.17: Cdigo de creacin del objeto y del escuchador de eventos asociado.
Pg. 39 - 54
Curso de Java
Mtodos constructores
Mtodos
Descripcin
JColorChooser()
JColorChooser(Color)
JColorChooser(ColorSelectionModel)
Principales mtodos
Mtodos
Descripcin
Color showDialog(Component,
String, Color)
JDialog createDialog(Component,
String, boolean, JColorChooser,
ActionListener, ActionListener)
void setPreviewPanel(JComponent)
JComponent getPreviewPanel()
void
setChooserPanels(AbstractColorCho
oserPanel[])
AbstractColorChooserPanel[]
getChooserPanels()
Pg. 40 - 54
Curso de Java
void
addChooserPanel(AbstractColorCho
oserPanel)
AbstractColorChooserPanel
removeChooserPanel(AbstractColor
ChooserPanel)
void setColor(Color)
void setColor(int, int, int)
void setColor(int)
Color getColor()
void
setSelectionModel(ColorSelectionMo
del)
ColorSelectionModel
getSelectionModel()
Pg. 41 - 54
Curso de Java
El
componente
JToolBar
dispone
entre
sus
mtodos
de
uno,
setFloatable(boolean) que permite que la barra de herramientas tenga un
comportamiento flotable, es decir que sea movible a otro punto del componente
contenedor.
Mtodos constructores
Mtodos
Descripcin
JToolBar()
JButton add(Action)
Component add(Component)
void addSeparator()
void setFloatable(boolean)
boolean isFloatable()
Pg. 42 - 54
Curso de Java
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
class ejemploJToolBar extends JFrame {
JToolBar TBarra=new JToolBar();
JButton BNuevo=new JButton("A");
JButton BAbrir=new JButton("B");
JButton BCopiar=new JButton("C");
JButton BCortar=new JButton("D");
JButton BPegar=new JButton("E");
JButton BGuardar=new JButton("F");
public ejemploJToolBar() {
TBarra.add(BNuevo);
TBarra.add(BAbrir);
TBarra.add(BGuardar);
TBarra.addSeparator();
TBarra.add(BCopiar);
TBarra.add(BCortar);
TBarra.add(BPegar);
BGuardar.setToolTipText ("Guardar");
BNuevo.setToolTipText ("Nuevo");
BAbrir.setToolTipText ("Abrir");
BCopiar.setToolTipText ("Copiar");
BCortar.setToolTipText ("BCortar");
BPegar.setToolTipText ("Pegar");
add(TBarra,"North");
TBarra.setFloatable(true);
setTitle("Ejemplos JToolBar");
setSize(800,600);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); }
});
static void
main (String []args){
4.2.2.1 public
rboles:
JTree
new ejemploJToolBar();
}
}
Pg. 43 - 54
Curso de Java
Arboles
Con la clase JTree, se puede mostrar un rbol de datos. JTree realmente no
contiene datos, simplemente los visualiza. Aqu tienes una imagen de un rbol:
Como muestra la figura anterior, JTree muestra los datos verticalmente. Cada fila
contiene exactamente un tem de datos (llamado un nodo). Cada rbol tiene un
nodo raz (llamado Root en la figura anterior, del que descienden todos los nodos.
Los nodos que no pueden tener hijos se llaman nodos leaf (hoja). En la figura
anterior, el aspecto-y-comportamiento marca los nodos hojas con un crculo.
Los nodos que no sean hojas pueden tener cualquier nmero de hijos, o incluso no
tenerlos. En la figura anterior, el aspecto-y-comportamiento marca los nodos que
no son hojas con una carpeta. Normalmente el usuario puede expandir y contraer
los nodos que no son hojas -- haciendo que sus hijos sena visibles o invisibles -pulsando sobre l. Por defecto, los nodos que no son honas empiezan contraidos.
Cuando se inicializa un rbol, se crea un ejemplar de TreeNode para cada nodo del
rbol, incluyendo el raz. Cada nodo que no tenga hijos es una hoja. Para hacer que
un nodo sin hijos no sea una hoja, se llama al mtodo setAllowsChildren(true)
sobre l.
Pg. 44 - 54
Curso de Java
import java.io.File;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class ejemploArbol extends JFrame {
public ejemploArbol() {
super("Curso de Java: Arbol de Ficheros");
TreeModel tm = new TreeModel() {
private File root = new File("/");
public Object getRoot() {
return root;
}
public Object getChild(Object parent, int index) {
String hijos[] = ((File)parent).list();
if (hijos == null) return null;
if (index >= hijos.length) return null;
return new File((File)parent, hijos[index]);
}
public int getChildCount(Object parent) {
String hijos[] = ((File)parent).list();
if (hijos == null) return 0;
return hijos.length;
}
public int getIndexOfChild(Object parent, Object child) {
String hijos[] = ((File)parent).list();
if (hijos == null) return -1;
String nombre = ((File)child).getName();
for (int i=0 ; i< hijos.length ; i++)
if (nombre.equals(hijos[i])) return i;
return -1;
}
public boolean isLeaf(Object node) {
return ((File)node).isFile();
}
};
Pg. 45 - 54
Curso de Java
Laboratorio
Para el desarrollo de un editor de texto simple se ha diseado la siguiente pantalla:
Pg. 46 - 54
Curso de Java
/*****JMenuBar*****/
menuBar = new JMenuBar();
fileMenu = new JMenu("Archivo");
newMenu = new JMenuItem("Nuevo");
openMenu = new JMenuItem("Abrir");
saveMenu = new JMenuItem("Guardar");
exitMenu = new JMenuItem("Salir");
//Agrega los items al menu
fileMenu.add(newMenu);
fileMenu.add(openMenu);
fileMenu.add(saveMenu);
fileMenu.addSeparator();
fileMenu.add(exitMenu);
//Agrega el menu a la barra de menu
menuBar.add(fileMenu);
//Setea esa bara de menu para el frame
this.setJMenuBar(menuBar);
/*****JToolBar*****/
toolBar = new JToolBar();
//Crea los botones asignando sendas imgenes y los agrega al toolbar
openButton = new JButton();
openButton.setIcon(new ImageIcon(getClass().getResource("/open.gif")));
openButton.setMargin(new Insets(0, 0, 0, 0));
toolBar.add(openButton);
saveButton = new JButton();
saveButton.setIcon(new ImageIcon(getClass().getResource("/save.gif")));
saveButton.setMargin(new Insets(0, 0, 0, 0));
toolBar.add(saveButton);
//agrega un separador en la toolbar
toolBar.addSeparator();
copyButton = new JButton();
copyButton.setIcon(new ImageIcon(getClass().getResource("/copy.gif")));
copyButton.setMargin(new Insets(0, 0, 0, 0));
toolBar.add(copyButton);
cutButton = new javax.swing.JButton();
cutButton.setIcon(new ImageIcon(getClass().getResource("/cut.gif")));
cutButton.setMargin(new Insets(0, 0, 0, 0));
toolBar.add(cutButton);
pasteButton = new javax.swing.JButton();
pasteButton.setIcon(new ImageIcon(getClass().getResource("/paste.gif")));
pasteButton.setMargin(new Insets(0, 0, 0, 0));
toolBar.add(pasteButton);
//Agrega el toolbar en el norte del contenedor
this.getContentPane().add(toolBar, BorderLayout.NORTH);
...
Pg. 47 - 54
Curso de Java
...
/*****Status bar*****/
statusPanel = new JPanel();
statusPanel.setLayout(new BorderLayout());
//crea las etiquetas para la barra de estado
statusMsg1 = new JLabel("Estado: ");
statusMsg2 = new JLabel();
statusPanel.add(statusMsg1, BorderLayout.WEST);
statusPanel.add(statusMsg2, BorderLayout.CENTER);
//Agrega el panel de satus al sur del contenedor
this.getContentPane().add(statusPanel, BorderLayout.SOUTH);
/*****Text Editor*****/
editPane = new JEditorPane();
editPane.setText("");
scrollPaneRight = new JScrollPane(editPane);
/*****List*****/
list=new JList();
scrollPaneLeft=new JScrollPane(list);
openSelectedButton=new JButton("Abrir");
/*****leftPanel*****/
leftPanel=new JPanel(new BorderLayout());
leftPanel.add(scrollPaneLeft,BorderLayout.CENTER);
leftPanel.add(openSelectedButton,BorderLayout.SOUTH);
/*****Split Panel*****/
//Define un contenedor con division izq-der
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setRightComponent(scrollPaneRight);
splitPane.setLeftComponent(leftPanel);
this.getContentPane().add(splitPane, BorderLayout.CENTER);
Pg. 48 - 54
Curso de Java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing .*;
public class albumFrame extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JMenuBar menuBar1 = new JMenuBar();
JMenu menuFile = new JMenu();
JMenuItem menuFileExit = new JMenuItem();
JToolBar toolBar = new JToolBar();
JComboBox jComboBox1 = new JComboBox();
JButton jButton1 = new JButton();
JPanel jPanel2 = new JPanel();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JLabel jLabel1 = new JLabel();
File root = new File(".");
Image foto;
Vector imagenes = new Vector();
int index = 0;
String folder ="";
public albumFrame() {
super();
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
ScanAlbum();
this.getContentPane().setLayout(borderLayout1);
this.setSize(new Dimension(800, 600));
jPanel1.setBackground(Color.white);
this.setTitle("Album");
menuFile.setText("Archivo");
menuFileExit.setText("Salir");
jButton1.setText("Go!!");
...
Pg. 49 - 54
Curso de Java
...
menuFile.setBackground(new Color(255, 183, 0));
menuFileExit.setBackground(new Color(255, 183, 0));
jPanel2.setBackground(new Color(255, 183, 0));
jButton2.setText("<<");
jButton3.setText(">>");
menuFile.add(menuFileExit);
menuBar1.add(menuFile);
menuBar1.setBackground(new Color(255, 183, 0));
this.setJMenuBar(menuBar1);
toolBar.add(jComboBox1, null);
toolBar.add(jButton1, null);
toolBar.setBackground(new Color(255, 183, 0));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jLabel1, null);
this.getContentPane().add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jButton2, null);
jPanel2.add(jButton3, null);
cargarAlbum();
//-------------- SALIR DEL PROGRAMA ----------------------menuFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileExit_ActionPerformed(e);
}
});
//-------------- FUNCION DEL GO!! ----------------------jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cargarAlbum();
}
});
//-------------- ADELANTAR FOTO ----------------------jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fotoAdelante();
}
});
//-------------- ATRASAR FOTO ----------------------jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fotoAtras();
}
});
}
void fileExit_ActionPerformed(ActionEvent e) {
System.exit(0);
}
void buttonClose_actionPerformed(ActionEvent e) {
}
void ScanAlbum(){
...
Pg. 50 - 54
Curso de Java
...
void cargarAlbum(){
imagenes.clear();
index = 0;
String album = (String)jComboBox1.getSelecte dItem();
File albumCarpeta = new File (album);
folder = albumCarpeta.getName();
System.out.println(albumCarpeta.getName());
File[] fotos = albumCarpeta.listFiles();
for (int i=0; i<fotos.length; i++)
if (fotos[i].isFile()){
imagenes.add(fotos[i].getName());
System.out.println(fotos[i].getName());
}
ImageIcon imagen = new ImageIcon(folder+"\\"+(String)imagenes.elementAt(0));
jLabel1.setIcon(imagen);
}
void fotoAdelante(){
System.out.println("Adelante ..");
if ((index+1) < imagenes.size()){
index++;
ImageIcon imagen = new
ImageIcon(folder+"\\"+(String)imagenes.elementAt(index));
jLabel1.setIcon(imagen);
System.out.println(index + " : " + folder+"\\"+(String)imagenes.elementAt(index));
}
else
{
JOptionPane.showMessageDialog(null, "Fin de las Fotos del
Album","Atencion",JOptionPane.OK_OPTION );
}
}
void fotoAtras(){
System.out.println("Atras ..");
if ((index-1) > -1){
index--;
ImageIcon imagen = new
ImageIcon(folder+"\\"+(String)imagenes.elementAt(index));
jLabel1.setIcon(imagen);
System.out.println(index + " : " + folder+" \\"+(String)imagenes.elementAt(index));
}
else {
JOptionPane.showMessageDialog(null, "Fin de las Fotos del
Album","Atencion",JOptionPane.OK_OPTION );
}
}
}
Pg. 51 - 54
Curso de Java
Pg. 52 - 54
Curso de Java
Ejercicios
public static void main( String args[] )
{
DemoSlider aplicacion = new DemoSlider();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase DemoSlider
Pg. 53 - 54
Curso de Java
Ejercicios
Pg. 54 - 54