100% encontró este documento útil (1 voto)
162 vistas54 páginas

Tema 5 - Curso Java Componentes

Las etiquetas (JLabel) y los botones de radio (JRadioButton) son componentes básicos de interfaz gráfica en Swing. Las etiquetas se usan para mostrar texto e imágenes estáticas, mientras que los botones de radio permiten al usuario seleccionar una opción de varias mutuamente excluyentes. El documento proporciona ejemplos de código para crear y configurar estas interfaces y explica sus métodos y propiedades más importantes.

Cargado por

josemaria181159
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
162 vistas54 páginas

Tema 5 - Curso Java Componentes

Las etiquetas (JLabel) y los botones de radio (JRadioButton) son componentes básicos de interfaz gráfica en Swing. Las etiquetas se usan para mostrar texto e imágenes estáticas, mientras que los botones de radio permiten al usuario seleccionar una opción de varias mutuamente excluyentes. El documento proporciona ejemplos de código para crear y configurar estas interfaces y explica sus métodos y propiedades más importantes.

Cargado por

josemaria181159
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Curso de Java

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:

LEFT o izquierda ([Link]).


CENTER o centrada([Link]).
RIGHT o derecho ([Link]).

Un ejemplo de la utilizacin de este componente podra ser el siguiente en el que se


muestran las distintas construcciones del componente JLabel:

Jess Cceres Tello Pg. 1 - 54


Curso de Java

Para la distribucin de las distintas etiquetas de este interfaz se ha utilizado lo que


se llama un manager layout, o manejador de contenidos, necesario para colocar
correctamente los componentes swing en un componente contenedor como se ver
en el prximo tema.

import [Link];
import [Link].*; // para el manejo de eventos
import [Link].*; // para las componentes swing que utilicemos

public class ejemploJLabel extends JFrame {

public ejemploJLabel(String titulo) {

JLabel label1,label2,label3;

ImageIcon imagen1=new ImageIcon("images/[Link]");


ImageIcon imagen2=new ImageIcon("images/[Link]");
label1=new JLabel("Etiqueta solo con texto");
label2=new JLabel(imagen1);
label3=new JLabel("Etiqueta con texto e imagen",imagen2,[Link]);

//En label3, establecemos la posicin del texto respecto a la imagen.

[Link]([Link]);
[Link]([Link]);
//Aadimos la ventana a su oyente de eventos correspondiente.

addWindowListener(new CerrarEjemploJLabel());

//Por ltimo, aadimos las etiquetas y mostramos la ventana.

//setLayout(new GridLayout(0,1,0,15));
getContentPane().add(label1,[Link]);
getContentPane().add(label2,[Link]);
getContentPane().add(label3,[Link]);
setTitle(titulo);
}

public static void main (String[] args) {


WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);
}
};
JFrame frame = new ejemploJLabel("Curso de Java: JLabel");
[Link](l);
[Link]();
[Link](true);

}
}

Ejemplo 5.1: Utilizacin de JLabel

Jess Cceres Tello Pg. 2 - 54


Curso de Java

Mtodos Constructores

Mtodos Descripcin

Crea una etiqueta.


JLabel()
Crea una etiqueta con la imagen indicada.
JLabel(Icon)
Crea una etiqueta con la imagen y el alineamiento
JLabel(Icon,int) indicados. Puede ser LEFT, CENTER y RIGHT.

Crea una etiqueta con el texto indicado.


JLabel(String)
Crea una etiqueta con el texto y alineamiento indicados.
JLabel(String,int)
Crea una etiqueta con el texto, imagen y alineamiento
JLabel(String,Icon,int) indicados.

Principales Mtodos

Mtodos Descripcin

Establece y obtiene, respectivamente, el


void setText(String)
texto de la etiqueta.
String getText()
Establece y obtiene, respectivamente, la
void setIcon(Icon)
imagen de la etiqueta.
Icon getIcon()
Establece y obtiene, respectivamente, la
posicin horizontal y vertical de el
contenido de la etiqueta. Los posibles
void setHorizontalAlignment(int) valores horizontales son: LEFT (por
void setVerticalAlignment(int) defecto, para etiquetas con slo texto),
int getHorizontalAlignment() CENTER (por defecto, para etiquetas con
int getVerticalAlignment() 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
void setHorizontalTextPosition(int)
imagen. Los posibles valores
void setVerticalTextPosition(int)
horizontales son: LEFT, CENTER y
int getHorizontalTextPosition()
RIGHT (por defecto). Los posibles valores
int getVerticalTextPosition()
verticales son: TOP, CENTER (por
defecto) y BOTTOM.

Jess Cceres Tello Pg. 3 - 54


Curso de Java

Botones de Radio: JRadioButton

Los Botones de Radio son grupos de botones en los que, por convencin, slo uno
de ellos puede estar seleccionado. Swing soporta botones de radio con las clases
JRadioButton y ButtonGroup.

Swing tambin ofrece la posibilidad de poner radio botones dentro de un men,


como ya veremos ms adelante. Esto se consigue utilizando la clase
JRadioButtonMenuItem.

import [Link].*;
import [Link].*;
import [Link].*;

public class ejemploJRadioButton1 extends JFrame


implements ActionListener{

public ejemploJRadioButton1(String titulo) {

//Creacin de los RadioButtons


JRadioButton boton1 =
new JRadioButton("Slo texto");
[Link](KeyEvent.VK_B);
[Link]("BOTON1");
[Link](true);

JRadioButton boton2 = new JRadioButton(


new ImageIcon("images/[Link]"));
[Link](KeyEvent.VK_C);
[Link]("BOTON2");

JRadioButton boton3 = new JRadioButton("Texto e Imagen",


new ImageIcon("images/[Link]"));
[Link](KeyEvent.VK_D);
[Link]("BOTON3");

//Definiendo escuchadores de eventos


[Link](this);
[Link](this);
[Link](this);

getContentPane().add(boton1,[Link]);
getContentPane().add(boton2,[Link]);
getContentPane().add(boton3,[Link]);
pack();
setTitle(titulo);
}
...

Jess Cceres Tello Pg. 4 - 54


Curso de Java

...
public void actionPerformed(ActionEvent e)
{[Link]("Evento producido por " + [Link]());}

public static void main (String[] args) {


WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);
}
};
JFrame frame = new ejemploJRadioButton1("Curso de Java: JRadioButton");
[Link](l);
[Link]();
[Link](true);

}
}

Ejemplo 5.2: JRadioButton en JFrame

Mtodos constructores

Mtodos Descripcin

Crea un JRadioButton sin texto y no seleccionado.


JRadioButton()
Crea un RadioButton especificando el escuchador
JRadioButton(Action)
de eventos que tendr asociado.

Crea un RadioButton con un texto determinado.


JRadioButton(String)
Crea un RadioButton especificando el texto y el
JRadioButton(String, estado, seleccionado o no seleccionado (true o
boolean) false)

Crea un RadioButton con una imagen, sin texto y


JRadioButton(Icon) sin seleccionar.

Crea un RadioButton con la imagen seleccionada


JRadioButton(Icon, y el estado (true seleccionado, false no
boolean) seleccionado)

Crea un RadioButton no seleccionado con un


JRadioButton(String, Icon) texto y con la imagen espeficificada

Crea un RadioButton especificando un texto, una


JRadioButton(String, Icon,
imagen y el estado
boolean)

Jess Cceres Tello Pg. 5 - 54


Curso de Java

Principales mtodos

Esta clase hereda todos los mtodos de AbstractButton. Se recomienda consultar


sus mtodos en la pgina de documentacin del api de Java.

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();
[Link](birdButton);
[Link](catButton);
[Link](dogButton);
[Link](rabbitButton);
[Link](pigButton);

...

// Coloca los RadioButtons dentro de un panel para aadirlo a la ventana


JPanel radioPanel = new JPanel();
[Link](new GridLayout(0, 1));
[Link](birdButton);
[Link](catButton);
[Link](dogButton);
[Link](rabbitButton);
[Link](pigButto n);
...
//Por ltimo aade el panel a la ventana que ser visible
getContentPane().add(radioPanel,[Link]);
getContentPane().add(picture,[Link]);

...

Ejemplo 5.3: Utilizacin de la clase ButtonGroup para agrupar JRadioButtons.

Jess Cceres Tello Pg. 6 - 54


Curso de Java

Hay que resaltar que cuando se define un ButtonGroup no se est definiendo un


componente nuevo, simplemente se est indicando que el conjunto de
componentes que lo componen tienen las caractersticas que se han indicado
anteriormente. A la hora de insertarlo en la ventana habr que insertar cada uno de
los botones, no se podr insertar el grupo de botones creado ya que como tal no
existe.

Componente de chequeo: JCheckBox

Los checkbox son similares a los radiobutton con la excepcin de que en stos s
que puede haber ms de uno de ellos seleccionado, o ninguno.

Swing tambin permite insertar este tipo de componentes en mens. Esto se


consigue a travs de la clase JCheckBoxMenuItem que veremos posteriormente.

Tanto la clase JCheckBox, como la clase JChekBoxMenuItem, son subclases de


AbstractButton, por lo que heredan su funcionalidad.

import [Link].*;
import [Link].*;
import [Link].*;

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");
[Link](KeyEvent.VK_B);
[Link](true);

glassesButton = new JCheckBox("Gafas");


[Link](KeyEvent.VK_G);
[Link](true);

hairButton = new JCheckBox("Pelo");


[Link](KeyEvent.VK_P);
[Link](true);

teethButton = new JCheckBox("Dientes");


[Link](KeyEvent.VK_D);
[Link](true);
...

Jess Cceres Tello Pg. 7 - 54


Curso de Java

...
//Registro de un escuchador para los eventos de los checkbox.
[Link](this);
[Link](this);
[Link](this);
[Link](this);
choices = new StringBuffer("cght");

//Crea una etiqueta para cargar la imagen


pictureLabel = new JLabel();
[Link]([Link]().deriveFont([Link]));
updatePicture();
//Coloca los checkbox en un panel
JPanel checkPanel = new JPanel(new GridLayout(0, 1));
[Link](chinButton);
[Link](glassesButton);
[Link](hairButton);
[Link](teethButton);
getContentPane().add(checkPanel, [Link]);
getContentPane().add(pictureLabel, [Link]);
pack();
setTitle(titulo);
}
/** Escuchando los eventos de los checkbox. */
public void itemStateChanged(ItemEvent e) {
int index = 0;
char c = '-';
Object source = [Link]();

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 ([Link]() == [Link]) {
c = '-';
}

//Aplica los cambios al string


[Link](index, c);
updatePicture();
}
...

Jess Cceres Tello Pg. 8 - 54


Curso de Java

...

protected void updatePicture() {


//Actualiza el icono de la etiqueta
ImageIcon icon = createImageIcon(
"images/checkbox/geek-"
+ [Link]()
+ ".gif");
[Link](icon);
[Link]([Link]());
if (icon == null) {
[Link]("Imagen perdida");
} else {
[Link](null);
}
}

/** Devuelve un ImageIcon, o null si el path no es vlido*/

protected static ImageIcon createImageIcon(String path) {


[Link] imgURL = [Link](path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
[Link]("Couldn't find file: " + path);
return null;
}
}

public static void main(String[] args) {


WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);
}
};
JFrame frame = new ejemploJCheckBox("Curso de Java: JCheckBox");
[Link](l);
[Link]();
[Link](true);

}
}

Ejemplo 5.4: Uso de JCheckBox en Java

Mtodos constructores

Mtodos Descripcin

JCheckBox () Crea un objeto JCheckBox.

Crea un objeto JCheckBox que muestra el


JCheckBox(String) texto especificado en el argumento.

Jess Cceres Tello Pg. 9 - 54


Curso de Java

Crea un objeto JCheckBox que muestra la


JCheckBox(Icon) imagen especificada en el argumento.

Crea un objeto JCheckBox que muestra el


texto especificado en String. Si el argumento
JCheckBox(String,boolean) booleano est a true el checkbox se
inicializar como seleccionado.

Crea un objeto JCheckBox que muestra la


imagen especificada en el argumento Icon. Si
JCheckBox(Icon, boolean) el argumento booleano est a true, el
checkbox se inicializar como seleccionado.

Crea un objeto JCheckBox que muestra el


JCheckBox(String,Icon) texto y la imagen pasados como parmetros.

Crea un objeto JCheckBox que muestra el


texto y la imagen pasados como parmetro.
JCheckBox(String,Icon,boolean)
Si el argumento booleano est a true, el
checkbox se inicializar como seleccionado.

Principales mtodos

Esta clase hereda todos los mtodos de AbstractButton. Se recomienda consultar


sus mtodos en la pgina de documentacin del api de Java.

Componente Combo: JComboBox

Swing permite la construccin de dos tipos de ComboBox mediante su clase


JComboBox que son los editables y los no editables. Por defecto este componente
se crea NO editable. Tanto uno como otro constan, bsicamente, de una lista
desplegable. La primera lnea de ComboBox permite escribir una opcin que no se
ajusta a las mostradas en la lista.

Esto sera un ejemplo de un JComboBox NO


editable donde al usuario no se le permite que
introduzca ningn valor, simplemente que
seleccione uno de ellos.

Jess Cceres Tello Pg. 10 - 54


Curso de Java

En este caso, sin embargo, se ofrece al usuario la posibilidad de introducir su propio


modelo, es decir, se le permite introducir una nueva opcin del JComboBox adems
de las ya existentes.

public ejemploJComboBox2(String titulo) {


String[] patternExamples = {
"dd MMMMM yyyy",
"[Link]",
"MM/dd/yy",
"[Link] G 'at' hh:mm:ss z",
"EEE, MMM d, ''yy",
"h:mm a",
"H:mm:ss:SSS",
"K:mm a,z",
"[Link] GGG hh:mm aaa"
};
currentPattern = patternExamples[0];
JLabel patternLabel1 = new JLabel("Introduzca el modelo de cadena o");
JLabel patternLabel2 = new JLabel("seleccione una de la lista:");
JLabel patternLabel3 = new JLabel("\n");

JComboBox patternList = new JComboBox(patternExamples);


[Link](true);
[Link](this);

//Create the UI for displaying result.


JLabel resultLabel = new JLabel("Current Date/Time",
[Link]); //== LEFT
result = new JLabel(" ");
[Link]([Link]);
[Link]([Link](
[Link]([Link]),
[Link](5,5,5,5)
));
JPanel patternPanel = new JPanel();
[Link](new BoxLayout(patternPanel,
BoxLayout.PAGE_AXIS));
[Link](patternLabel1);
[Link](patternLabel2);
[Link](patternLabel3);
[Link](Component.LEFT_ALIGNMENT);
[Link](patternList);

JPanel resultPanel = new JPanel(new GridLayout(0, 1));


[Link](resultLabel);
[Link](result);

[Link](Component.LEFT_ALIGNMENT);
[Link](Component.LEFT_ALIGNMENT);
getContentPane().add(patternPanel, [Link]);
getContentPane().add(resultPanel, [Link]);

pack();
setTitle(titulo);
}

Ejemplo 5.5: Cdigo del Constructor del JComboBox editable.

Jess Cceres Tello Pg. 11 - 54


Curso de Java

public ejemploJComboBox(String titulo) {

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };

//Create the combo box, select the item at index 4 .


//Indices start at 0, so 4 specifies the pig.
JComboBox petList = new JComboBox(petStrings);
[Link](4);
[Link](this);

//Set up the picture.


picture = new JLabel();
[Link]([Link]().deriveFont([Link]));
[Link]([Link]);
updateLabel(petStrings[[Link]()]);
[Link]([Link](10,0,0,0));

//The preferred size is hard-coded to be the width of the


//widest image and the height of the tallest image + the border.
//A real program would compute this.
[Link](new Dimension(177, 122+10));

getContentPane().add(petList, [Link]);
getContentPane().add(picture, [Link]);

pack();
setTitle(titulo);

Ejemplo 5.6: Cdigo del Constructor del JComboBox NO editable

Mtodos Constructores

Mtodos Descripcin

Crea un ComboBox con la lista indicada.


JComboBox(Vector)
Crea un ComboBox con la lista indicada.
JComboBox(Object[])

Crea un ComboBox con la lista indicada.


JComboBox(ComboBoxModel)

Jess Cceres Tello Pg. 12 - 54


Curso de Java

Principales Mtodos

Mtodos Descripcin

Aade e inserta, respectivamente, un


void addItem(Object)
item en la lista.
void insertItemAt(Object,int)
Object getItemAt(int) Obtiene un item de la lista.
Object getSelectedItem()
Obtiene el nmero de items de la lista.
int getItemCount()
Elimina uno o ms items de la lista.
void removeItemAt(int)
void removeItem(Object)
void removeAllItems()

Establece y obtiene, respectivamente, si


void setEditable(boolean)
el combobox es editable.
boolean isEditable()

Establece y obtiene, respectivamente,


void setModel(ComboBoxModel) el modelo de datos que proporcionan
ComboBoxModel getModel() los item de la lista.

Establece y obtiene, respectivamente,


el editor, es decir, el objeto responsable
void setEditor(ComboBoxEditor)
de la edicin del item seleccionado en el
ComboBoxEditor getEditor()
combobox.

Establece y obtiene, respectivamente,


void setRenderer(ListCellRenderer) el objeto responsable de crear el item
ListCellRenderer getRe nderer() seleccionado en el combobox.

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

Jess Cceres Tello 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:

Baste como introduccin al tema de eventos este ejemplo en el cual cuando el


usuario pulsa un botn se genera un evento, en este caso de tipo action. Como
consecuencia de este hecho se ha implementado un oyente para este tipo de
eventos, un listener. El tema eventos se tratar ms en profundidad en un tema
siguiente.

Mtodos Constructores

Mtodos Descripcin
Crea un objeto JButton vaco.
JButton()
Crea un objeto JButton y lo inicializa con
JButton(String) el texto indicado.

Crea un objeto JButton y lo inicializa con


JButton(Icon) la imagen indicada.

Crea un objeto JButton y lo inicializa con


JButton(String,Icon) el texto y la imagen indicados.

Principales Mtodos

Mtodos Descripcin
Establece y obtiene, respectivamente, la
void setMnemonic(char)
tecla alternativa para pulsar el botn.
char getMnemonic()
Establece y obtiene, respectivamente, el
void setActionCommand(String)
nombre de la accin realizada por el botn.
String getActionCommand(void)
Establece y obtiene, respectivamente, si el
void setSelected(boolean)
bot est o no seleccionado.
boolean isSelected()

Jess Cceres Tello Pg. 14 - 54


Curso de Java

Realiza un "click". El argumento que se


pasa en el segundo mtodo, especifica el
void doClick()
tiempo en milisegundos que el botn
void doClick(int)
debera estar pulsado.

Aade y elimina, respectivamente, un


void addActionListener(ActionListener) objeto a la clase de escucha de eventos
ActionListener removeActionListener() ActionListener.

Aade y elimina, respectivamente, un


void addItemListener(ItemListener) objeto a la clase de escucha de eventos
ItemListener removeItemListener() ItemListener.

Establece y obtiene, respectivamente, el


void setText(String)
texto que se presenta en un botn.
String getText()
Establece y obtiene, respectivamente, el
void setIcon(Icon) icono o imagen mostrada en un botn,
Icon getIcon() cuando este no est pulsado.

Establece y obtiene, respectivamente, el


void setPressedIcon(Icon) icono o imagen mostrada en un botn
Icon getPressedIcon() cuando este est pulsado.

Establece y obtiene, respectivamente, la


void setDisabledIcon(Icon) imagen mostrada por el botn, cuando est
Icon getDisabledIcon() desactivado

Establece la imagen mostrada por el botn,


void setSelectedIcon(Icon)
cuando est seleccionado.
Icon getSelectedIcon()
void setDisabledSelectedIcon(Icon)
Icon getDisabledSelectedIcon()
Mtodos utilizados para mostrar,
void setRolloverEnabled(boolean)
seleccionar, obtener ...etc. un icono, que
boolean getRolloverEnabled()
aparecer cuando el cursor pase sobre el
void setRolloverIcon(Icon)
botn.
Icon getRolloverIcon()
void setRolloverSelectedIcon(Icon)
Icon getRolloverSelectedIcon()
Establece y obtiene, respectivamente,
donde debe situarse el texto horizontal y
verticalmente respecto de la imagen o
icono. Los valores son:

void setHorizontalTextPosition(int) - Horizontal: [Link]


void setVerticalTextPosition(int) [Link]
int getHorizontalTextPosition() [Link]
int getVerticalTextPosition()

- Vertical: [Link]
[Link]
[Link]

void setHorizontalAlignment(int) Establece y obtiene, respectivamente,


void setVerticalAlignment(int) dnde debe situarse el contenido del botn.
int getHorizontalAlignment() Los valores, tanto para horizontal como

Jess Cceres Tello Pg. 15 - 54


Curso de Java

int getVerticalAlignment() para vertical son los mismos que los


indicados en los mtodos anteriores.

Establece y obtiene, respectivamente, la


void setMargin(Insets) distancia, en pixels, entre el borde del
Insets getMargin() botn y su contenido.

Establece y obtiene, respectivamente, si el


void setBorderPainted(boolean)
borde del botn debera dibujarse.
boolean isBorderPainted()

import [Link]; //para el manager layout


import [Link].*; // para el manejo de eventos
import [Link]; //para la ventana visual
import [Link]; // como superclase de JButton
import [Link]; // para los botones
import [Link]; // para las imagenes

public class ejemploJButton extends JFrame implements ActionListener {

JButton button1,button2,button3; // definimos los botones

public ejemploJButton(String titulo) { // metodo constructor

ImageIcon imagenizquierda=new ImageIcon("images/[Link]");


ImageIcon imagencentral=new ImageIcon("images/[Link]");
ImageIcon imagenderecha=new ImageIcon("images/[Link]");

button1=new JButton("izquierda",imagenizquierda);
button2=new JButton("Button central",imagencentral);
button3=new JButton("derecha",imagenderecha);

//Aadimos los botones al frame, sabiendo que por defecto


//el componente JFrame tiene un manager Layout BorderLayout

getContentPane().add(button1,[Link]);
getContentPane().add(button2,[Link]);
getContentPane().add(button3,[Link]);

[Link]([Link]);
[Link]([Link]);
[Link]("izquierda");
[Link]('i');

[Link]([Link]);
[Link]([Link]);
[Link]('c');

[Link]([Link]);
[Link]([Link]);
[Link]("derecha");
[Link]('d');

[Link](this);
[Link](this);

setTitle(titulo);
}
...

Jess Cceres Tello Pg. 16 - 54


Curso de Java

...
public void actionPerformed (ActionEvent e) {
if ([Link]().equals("izquierda")) {
[Link](false);
[Link](true);
}
if ([Link]().equals("derecha")) {
[Link](true);
[Link](false);
}
}

public static void main (String[] args) {


WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);
}
};
JFrame frame = new ejemploJButton("Curso de Java: JButton");
[Link](l);
[Link]();
[Link](true);

}
}

Ejemplo 5.7: Interfaz con botones utilizando JButton

reas de Texto: JTextField y JTextArea

Los campos de texto o textfield se utilizan cuando se necesita un area donde el


usuario pueda introducir un fragmento relativamente pequeo de informacin,
como el nombre, un identificador, un password,...

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

[Link](false);

Mtodos Constructores

Contructores para el componente JTextArea:

Mtodos Descripcin

JTextArea() Crea un rea de texto swing.

JTextArea(int,int) Crea un rea de texto swing, con el nmero de filas


y columnas respectivamente indicadas.

JTextArea(String) Crea un rea de texto swing con el texto


especificado.

JTextArea(String, int, int) Crea un rea de texto swing con el texto, nmero de
filas y nmero de columnas especificadas.

Constructores para el componente JTextField:

Mtodos Descripcin

JTextField() Crea un campo de texto swing.

JTextField(String) Crea un campo de texto swing que contiene el


texto especificado.

JTextField(int) Crea un campo de texto swing que contiene el


nmero de columnas indicadas.

JTextField(String,int) Crea un campo de texto swing con el nmero


de columnas y el texto especificado.

Jess Cceres Tello Pg. 18 - 54


Curso de Java

Principales Mtodos

Principales mtodos para el componente JTextArea:

Mtodos Descripcin

Establece y obtiene, respectivamente, el texto


void setText(String)
mostrado en el rea de texto swing.
String getText()

Establece y obtiene, respectivamente, si el rea de


void setEditable(boolean)
texto swing es editable.
boolean isEditable()

Establece y obtiene, respectivamente, el color del


void setForeground(Color)
texto del rea de texto swing.
Color getForeground()

Establece y obtiene, respectivamente, el color de


void setBackground(Color)
fondo del rea de texto swing.
Color getBackground()

Establece y obtiene la fuente utilizada en el rea de


void setFont(Font)
texto.
Font getFont()

Devuelve el nmero de filas del rea de texto swing.


public int getRows()

Devuelve el nmero de columnas del rea de texto


public int getColumns() swing.

Principales mtodos para el compoente JTextField:

Mtodos Descripcin

void setText(String) Establece y obtiene, respectivamente, el texto de el


String getText() campo de texto swing.

void setColumns(int) Establece y obtiene, respectivamente, el nmero de


int getColumns() columnas del campo de texto swing.

void setEditable(boolean) Establece y obtiene, respectivamente, si el campo de


boolean isEditable() texto swing es o no editable.

void setForeground(Color) Establece y obtiene, respectivamente, el color del texto.


Color getForeground()
void setBackground(Color) Establece y obtiene, respectivamente, el color de fondo
Color getBackground() del campo de texto swing.

void setFont(Font) Establece y obtiene, respectivamente, la fuente usada


Font getFont() en el campo de texto swing.

void setHorizontalAlignment(int) Establece y obtiene, respectivamente, la alineacin del


int getHorizontalAlignment() texto dentro del campo de texto. Esta alineacin puede
ser a la izquierda ([Link]), al centro
([Link]) o a la derecha
([Link]).

Jess Cceres Tello Pg. 19 - 54


Curso de Java

import [Link]; //para el manager layout


import [Link].*; // para el manejo de eventos
import [Link]; //para la ventana visual
import [Link];
import [Link];
import [Link];
import [Link];

public class ejemploJTextField extends JFrame implements ActionListener {

JButton boton;
static JTextField micampo;
JTextArea miarea;
JScrollPane miscroll;
String nuevalinea="\n";

public ejemploJTextField(String titulo) { // metodo constructor

boton = new JButton("Insertar");


micampo=new JTextField(30); // creamos el campo de texto
miarea=new JTextArea(10,30); // creamos el rea de texto
miscroll=new JScrollPane(miarea); // ser incluida en un scrollpane
//Evitamos que sea editable el componente JTextArea
[Link](false);
//Aadimos los botones al frame, sabiendo que por defecto
//el componente JFrame tiene un manager Layout BorderLayout

getContentPane().add(micampo,[Link]);
getContentPane().add(boton,[Link]);
getContentPane().add(miscroll,[Link]);

[Link]('i');
[Link](this);
setTitle(titulo);
}

public void actionPerformed (ActionEvent e) {


//Obtenemos el texto escrito en el campo textfield
String texto = [Link]();
//Lo aadimos al rea de texto
[Link](texto);
[Link](nuevalinea);
[Link]("");
[Link]();
}

public static void main (String[] args) {


WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);
}
};
JFrame frame = new ejemploJTextField("Curso de Java: JTextField - JTextArea");
[Link](l);
[Link]();
[Link](true);

//Se obtiene el focus de la aplicacin para este


//componente a travs de este mtodo heredado de JComponent
[Link]();
}
}

Ejemplo 5.8: Interfaz con campos de texto utilizando JTextField y JTextArea

Jess Cceres Tello Pg. 20 - 54


Curso de Java

Campos de Contrasea: JPasswordField

Swing proporciona la posibilidad de crear campos de texto para introducir


passwords o palabras claves mediante la calse JPasswordField. Esta clase es una
subclase de JTextField, por lo que todos los mtodos utilizados con los campos de
texto pordrn ser tambin utilizados con estos campos de texto para password.

Mtodos Constructores

Mtodos Descripcin

Crea un campo de texto para passwords.


JPasswordField()

Crea un campo de texto para passwords con el


JPasswordField(int)
nmero de columnas especificadas.

Principales mtodos

Mtodos Descripcin

Devuelve el carcter que se muestra en este campo.


char getEchoChar()
Por defecto es *

Indica el carcter que se mostrar en este campo. Si


se indica 0 el comportamiento ser similar al de un
setEchoChar(char c)
JTextField, es decir, se ver su contenido tal y como
se escribe.

boolean echoCharIsSet() Indica si se ha asignado un carcter visual al campo.

Devuelve la matriz de caracteres introducida en el


char[] getPassword()
campo.

Jess Cceres Tello Pg. 21 - 54


Curso de Java

import [Link].*;
import [Link].*;
import [Link].*;

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 );
[Link]( text1, [Link] );

// construccin de textfield con texto fijo


text2 = new JTextField( "Inserte un texto" );
[Link]( text2, [Link] );

// construccin de textfield con texto fijo de 20


//elementos visibles y ningn evento a la vista.
text3 = new JTextField( "JTextField no editable", 20 );
[Link]( false );
[Link]( text3, [Link] );

// construccin de textfield texto fijo


password = new JPasswordField( "Texto Oculto" );

[Link]( password, [Link] );


TextFieldTrato tra = new TextFieldTrato();
[Link]( tra );
[Link]( tra );
[Link]( tra );

[Link]( tra );
pack();
setVisible(true);
}

public static void main( String args[] ) {


ejemploJPasswordField app = new ejemploJPasswordField();
[Link](new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
[Link]( 0 );
}
}
);
}
}

...

Jess Cceres Tello 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 ( [Link]() == text1 )
s = "text1: " + [Link]();
else if ( [Link]() == text2 )
s = "text2: " + [Link]();
else if ( [Link]() == text3 )
s = "text3: " + [Link]();
else if ( [Link]() == password ) {
JPasswordField pwd =(JPasswordField) [Link]();
s = "password: " + new String( [Link]() );
}
[Link]( null, s );
}
}

Ejemplo 5.9: Ejemplo con componentes para password con JPasswordField

El resultado del cdigo anterior es el siguiente:

Brarras desplazables: JSlider

La clase JSlider proporciona al programa dor la capacidad de elaborar un


slider. Un slider permite al usuario elegir un valor (generalmente numrico)
comprendido entre un mnimo y un mximo, evitando con ello posibles errores de
entrada que se hubieran producido al utilizar otras estructuras, como por ejemplo,
un textfield o campo de texto.

Jess Cceres Tello Pg. 23 - 54


Curso de Java

Como se puede observar, el slider es simplemente una barra con un indicador


desplazable. Pero el slider anterior es demasiado sencillo, ya que nos e sabe la
posicin en la que se encuentra a no ser que incorporemos una etiqueta como en
el caso anterior, que nos indique qu valor va cogiendo en cada momento.

...

mislider=new JSlider(); // creamos el slider


micampo= new JTextField(); //creamos la etiqueta
[Link]([Link]); // establecemos la orientacin del slider
[Link](0); // valor mnimo que puede tomar el slider
[Link](100); // valor mximo que puede tomar el slider
[Link](25); // valor inicial que toma el slider

...

Ejemplo 5.10: Cdigo para la creacin de un JSlider.

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:

marcas mayores: que se fijan a travs de el mtodo


setMajorTickSpacing(int) (equivalen, por ejemplo, a los centmetros en
una regla).

marcas menores:que se fijan a travs de el mtodo


setMinorTickSpacing(int) (equivalen a los milmetros de una regla). En
este caso se le indicar en qu milmetro se quiere la marca, es decir, si se
indica 5 el resultado ser pero con 8 ser

es decir, se dibuja una marca cada 8 posiciones empezando desde el inicio.

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:

Jess Cceres Tello Pg. 24 - 54


Curso de Java

setMajorTickSpacing(25)

Tambin es posible que en vez de poner marcas numricas en el


deslizador, se quiera que contenga algn tipo diferente de
mensaje. Para ello, se tendr que crear una Hashtable (tabla
hash) que contenga el valor de cada etiqueta y la posicin donde
debe ser colocada. Un ejemplo de un slider con etiquetas sera el
siguiente:

El aspecto del slider es el mismo que en los casos anteriores, con


la diferencia que en vez de indicarnos, cada 10 o 25 posiciones,
el lugar donde nos encontramos, se indica el tanto por ciento que
se ha recorrido del slider.

Este es solo un ejemplo del tipo de mensaje que se puede incluir


en el slider. Por ejemplo, supongamos que tenemos una
aplicacin multimedia, donde aparece un slider que sirve para
controlar el volumen de un reproductor de CD. En este caso,
sera aconsejable, establecer etiquetas en el slider que indicaran
el grado del volumen (por ejemplo: bajo, normal, alto y muy alto). Adems, se
debe resaltar, que las etiquetas pueden ser tanto texto como imgenes, pudiendo
combinar ambos.

...

mislider=new JSlider(); // creamos el slider


micampo= new JTextField(); //creamos la etiqueta
[Link]([Link]); // establecemos la orientacin del slider
[Link](0); // valor mnimo que puede tomar el slider
[Link](100); // valor mximo que puede tomar el slider
[Link](1); // valor inicial que toma el slider

// creamos la tabla y aadimos los elementos


Dictionary mitabla=new Hashtable();
[Link](new Integer(0), new JLabel(" 0%"));
[Link](new Integer(25), new JLabel(" 25%"));
[Link](new Integer(50), new JLabel(" El medio (50%)"));
[Link](new Integer(75), new JLabel(" 75%"));
[Link](new Integer(100), new JLabel(" 100%"));
[Link](mitabla); // asociamos el slider con la tabla hash
[Link](true); //muestra las etiquetas numricas

...

Ejemplo 5.11: Cdigo necesario para la creacin de un JSlider vertical con etiquetas
personalizadas

Jess Cceres Tello Pg. 25 - 54


Curso de Java

...
ImageIcon imagen1 = new ImageIcon("images/slider/[Link]");
ImageIcon imagen2 = new ImageIcon("images/slider/[Link]");
ImageIcon imagen3 = new ImageIcon("images/slider/[Link]");
ImageIcon imagen4 = new ImageIcon("images/slider/[Link]");
ImageIcon imagen5 = new ImageIcon("images/slider/[Link]");

// creamos la tabla
Dictionary mitabla=new Hashtable(); // creamos la tabla hash y aadimos los
elementos
[Link](new Integer(0), new JLabel(imagen1));
[Link](new Integer(25), new JLabel(imagen2));
[Link](new Integer(50), new JLabel(imagen3));
[Link](new Integer(75), new JLabel(imagen4));
[Link](new Integer(100), new JLabel(imagen5));
[Link](mitabla); // asociamos el slider con la tabla hash
[Link](true); //muestra las etiquetas numricas
...

Ejemplo 5.12: Personalizacin del slider mediante imgenes de tipo ImageIcon

Mtodos constructores

Mtodos Descripcin

JSlider() Crea una barra desplazable o slider.

Crea un slider on los valores indicados. La


orientacin puede ser:
horizontal ([Link]) o
JSlider(int orient,
vertical ([Link]).
int min,
Los valores mnimo y mximo son
int max,
respectivamente, los valores mnimo y
int valor)
mximo que puede tomasr el slider. El ltimo
valor es el valor inicial del slider (donde se
posiciona el marcador).

Jess Cceres Tello Pg. 26 - 54


Curso de Java

Principales Mtodos

Mtodos Descripcin

Establece y obtiene, respectivamente, la


void setOrientation(int)
orientacin del slider.
int getOrientation()
Establece y obtiene, respectivamente, el valor
void setMinimum(int)
mnimo que puede tomar el slider.
int getMinimum()
Establece y obtiene, respectivamente, el valor
void setMaximum(int)
mximo que puede tomar el slider.
int getMaximum()
Establece y obtiene, respectivamente, el valor
void setValue(int)
actual del slider.
int getValue()
Establece y obtiene, respectivamente, el
void setMinorTickSpacing(int)
rango de marcas menores.
int getMinorTickSpacing()
Establece y obtiene, respectivamente, el
void setMajorTickSpacing(int)
rango de marcas mayores.
int getMinorTickSpacing()
Establece y obtiene, respectivamente, si se
void setPaintTicks (boolean)
dibujan las marcas en el slider.
boolean getPaintTicks()
Establece y obtiene, respectivamente, las
void setLabelTable(Dictionary)
etiquetas para el slider.
Dictionary getLabelTable()
Establece y obtiene, respectivamente, si se
void setPaintLabels(boolean)
dibujan las etiquetas para el slider.
boolean getPaintLabels()

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.

Jess Cceres Tello Pg. 27 - 54


Curso de Java

En principio este componente se cre para constituir un interfaz ligado a bases de


datos a travs del Java Database Connectivity (JDBC, para los amigos), y as evitar
la complejidad inherente al manejo de los datos, proporcionando mucha flexibilidad
al programador. Evidentemente existen caractersticas que pueden hacerlo muy
complejo, desde la obtencin de los datos desde una hoja de clculo o desde bases
de datos de diferente naturaleza, sin embargo tambin es posible crear una JTable
relativamente simple si se entiende correctamente el funcionamiento.

La JTable controla cmo se presentan los datos, siendo el componente


TableModel quien controla los datos en s mismos. Para crear una JTable habr
pues que crear un TableModel antes, normalmente. Se puede implementar, para
ello, el interfaz TableModel, pero es mucho ms simple heredar de la clase ayuda
AbstractTableModel.

Por defecto, todas las columnas de la tabla tienen la misma anchura, de modo que
la suma de la anchura de las columnas ser igual al tamao de la tabla (por
ejemplo, si nuestra tabla tiene 25 pxeles y 5 columnas, cada columna tendr
inicialmente y por defecto, una anchura de 5 pxeles (25 pxeles/5 columnas = 5
pxeles por columna)). Pero existen 2 casos en los que la anchura de las columnas
de una tabla se va a modificar:

1. Que el usuario cambie el tamao total de la tabla (ocurre, por ejemplo,


cuando se redimensiona la ventana que contiene a la tabla). En este caso, la
anchura de todas las columnas se modifica para amoldarse al nuevo tamao
de al tabla.

2. Que el usuario modifica la anchura de una sola columna. Cuando el usuario


ajusta el tamao de una columna moviendo su borde derecho, todas las
columnas que se encuentran a la derecha del punto de arrastre modifican su
anchura para acomodarse el nuevo espacio con el que cuentan.
Inicialmente, todas las columnas tienen la mis ma anchura:

Jess Cceres Tello Pg. 28 - 54


Curso de Java

Bien, pues se puede cambiar el comportamiento del redimensionado por defecto en


el segundo caso (se modifica la anchura de un sola columna) a travs del mtodo
setAutoResizeMode. El argumento de este mtodo debe ser una de estas 3
constantes definidas en JTable:

AUTO_RESIZE_SUBSEQUENT_COLUMNS: es el valor por defecto ya


explicado anteriormente. Adems de redimensionar la columna que cambia
de tamao, ajusta el tamao de todas las columnas que se encuentran a la
derecha del punto de arrastre.

AUTO_RESIZE_NEXT_COLUMN: ajusta nicamente las columnas


inmediatas a la izquierda y derecha del punto de arrastre.

AUTO_RESIZE_OFF: ajusta el tamao de la tabla total.

En el caso de que queramos que una de nuestras columnas tenga un tamao


diferente de las dems, sin necesidad de redimensionarla con el ratn cada vez que
se cree la tabla, podemos utilizar el mtodo setPreferredWidth(int).

Por defecto, una tabla permite que el usuario seleccione una o varias filas
contiguas. Pero, a pesar de ello, se permite al programador que establezca su
propio modelo de seleccin de filas. Esto se conseguir a travs del mtodo
setSelectionMode pasndole como parmetro una de las siguientes constantes,
definida en la interfaz ListSelectionModel:

SINGLE_SELECTION: solo puede ser seleccionada una fila de la tabla.

SINGLE_INTERVAL_SELECTION: se pueden seleccionar varias filas de la


tabla, siempre y cuando, sean contiguas, es decir, que aparezcan seguidos
en la tabla.

MULTIPLE_INTERVAL_SELECTION: es el valor por defecto y permite


seleccionar cualquier combinacin de filas de la tabla.

[Link](ListSelectionModel.SINGLE_SELECTION);

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 [Link].*;
import [Link].*;
import [Link].*;

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"};

JTable jt = new JTable(datos,titulos);


JScrollPane jsp = new JScrollPane(jt);
getContentPane().add(jsp);
pack();
setVisible(true);
}

public static void main(String args[]) {


dsfdf ejemploTablas1 t = new ejemploTablas1();
}
}

import [Link].*;
import [Link].*;
import [Link].*;

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"};

public int getRowCount() {


return [Link];
}
public int getColumnCount() {
return [Link];
}
public Object getValueAt(int r, int c) {
return datos[r][c];
}
public String getColumnName(int c) {
return titulos[c];
}
};

JTable jt = new JTable(tm);


JScrollPane jsp = new JScrollPane(jt);
getContentPane().add(jsp);
pack();
setVisible(true );
}

public static void main(String args[]) {


ejemploTablas2 t = new ejemploTablas2();
}
}

Ejemplo 5.13: Ejemplos de utilizacin del componente JTable con y sin el modelo de tabla
AbstractTableModel

Jess Cceres Tello 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:

crear una barra de mens a travs de JMenuBar.


crear el nmero de mens que queremos que aparezcan en la barra de
mens a travs de JMenu.
crear el nmero de items de men que queremos que aparezcan en cada
men, a travs de las clases:

o JMenuItem: si el item es normal, es decir, texto, imagen o ambos.
o JCheckboxMenuItem: si el item es un checkbox.
o JRadioButtonMenuItem: si el item es un radiobutton.

Adems existen 2 clases especiales:

JPopupMenu: clase que crea mens desplegables.


JSeparator: clase que crea separadores.

La interface MenuContainer solamente se puede implementar sobre un JFrame. Una


aplicacin que desee tener un JMenu debe crear un JFrame en primer lugar.
Veamos un ejemplo:

Jess Cceres Tello 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:

- Un componente de tipo texto


- Un componente con una imagen asociada

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
[Link](newMenu);
[Link](openMenu);
[Link](saveMenu);
[Link]();
[Link](exitMenu);
//Agrega el menu a la barra de menu
[Link](fileMenu);
//Setea esa bara de menu para el frame
[Link](menuBar);
...

Ejemplo 5.14: Ejemplo de construccin de un men con objetos JMenuItem

CheckBox en Mens: JCheckBoxMenuItem

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.

Jess Cceres Tello Pg. 32 - 54


Curso de Java

import [Link].*;
import [Link].*;
import [Link].*;

/*
* 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) {
[Link](0);
}
});

//Aade componentes a la ventana utilizando por defecto el layout manager BorderLayout.


Container contentPane = getContentPane();
output = new JTextArea(5, 30);
[Link](false);
scrollPane = new JScrollPane(output);
[Link](scrollPane, [Link]);

//Crea la barra de menu


menuBar = new JMenuBar();
setJMenuBar(menuBar);

//Construye el primer menu


menu = new JMenu("El Menu");
[Link](KeyEvent.VK_E);
[Link]().setAccessibleDescription(
"Este es el nico men en el programa que tiene menuItems");
[Link](menu);

//Construye un grupo de menu items del tipo check box


[Link]();
cbMenuItem = new JCheckBoxMenuItem("Un JMenItem tipo checkbox");
[Link](KeyEvent.VK_U);
[Link](this);
[Link](cbMenuItem);
cbMenuItem = new JCheckBoxMenuItem("Otro");
[Link](KeyEvent.VK_O);
[Link](this);
[Link](cbMenuItem);

}
...

Jess Cceres Tello Pg. 33 - 54


Curso de Java

...

public void actionPerformed(ActionEvent e) {


JMenuItem source = (JMenuItem)([Link]());
String s = "Action event detectado."
+ nuevalinea
+ " EVENTO ORIGEN: " + [Link]()
+ " (una instacia de " + getClassName(source) + ")";
[Link](s + nuevalinea);
}

public void itemStateChanged(ItemEvent e) {


JMenuItem source = (JMenuItem)([Link]());
String s = "Item event detectado."
+ nuevalinea
+ " EVENTO ORIGEN: " + [Link]()
+ " (una instancia de " + getClassName(source) + ")"
+ nuevalinea
+ " NUEVO ESTADO: "
+ (([Link]() == [Link]) ?
"seleccionado":"NO seleccionado");
[Link](s + nuevalinea);
}

// Devuelve el nombre de la clase


protected String getClassName(Object o) {
String classString = [Link]().getName();
int dotI ndex = [Link](".");
return [Link](dotIndex+1);
}

public static void main(String[] args) {


ejemploJCheckBoxMenuItem window = new ejemploJCheckBoxMenuItem();
[Link]("Curso de Java: JMe nuCheckBoxItem");
[Link](450, 260);
[Link](true);
}
}

Ejemplo 5.15: Utilizacin de JCheckBoxMenuItem en la construccin del un JMenu

RadioButton en Mens: JRadioButtonMenuItem

En este caso podemos insertar varios RadioButton dentro de un men. Esto se


consigue utilizando la clase JRadioButtonMenuItem

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.

Jess Cceres Tello Pg. 34 - 54


Curso de Java

Los selectores de ficheros se utilizan comunmente para dos propsitos:

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.

El selector de ficheros ni abre ni graba ficheros. Presenta un GUI para elegir un


fichero de una lista, nada ms. El programa ser el responsable de hacer algo con
el fichero, como abrirlo o grabarlo.

En este caso, cuando el usuario pulsa el botn Open se muestra un JFileChooser


para que pueda elegir el fichero a abrir, cuando pulsa el botn Save se mostrar
otro JFileChooser con la opcin de guardar el fichero.

Por defecto, un selector de ficheros que no haya sido mostrado anteriormente


muestra todos los ficheros en el directorio del usuario. Podemos especificarle un
directorio inicial utilizando uno de los otros constructores de JFileChooser, o
podemos selecccionar el directorio directamente con el mtodo
setCurrentDirectory.

El programa de ejemplo utiliza el mismo ejemplar de JFileChooser para mostrar el


selector de grabar ficheros, lo nico que cambiar ser su comportamiento, es
decir, el mtodo actionPerformed para el oyente de cada botn:

Jess Cceres Tello Pg. 35 - 54


Curso de Java

private class OpenListener implements ActionListener {


public void actionPerformed(ActionEvent e) {
int returnVal = [Link]([Link]);

if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = [Link]();
//Aqu es donde se abrira el fichero
[Link]("Abriendo: " + [Link]() + "." + newline);
} else {
[Link]("Cancelada la opcin de abrir..." + newline);
}
}
}

private class SaveListener implements ActionListener {


public void actionPerformed(ActionEvent e) {
int returnVal = [Link]([Link]);

if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = [Link]();
//Aqu es donde se guardara el fichero
[Link]("Saving: " + [Link]() + "." + newline);
} else {
[Link]("Cancelada la opcin de guardar..." + newline);
}
}
}

Ejemplo 5.16: Cdigo de comportamiento para cada botn

Si el usuario elige un fichero, el cdigo llama a getSelectedFile sobre el selector


de ficheros para obtener un ejemplar de File, que representa el fichero elegido. El
ejemplo obtiene el nombre del fichero y lo utiliza en un mensaje. Podemos utilizar
otros mtodos del objeto File, como getPath o isDirectory, para obtener
informacin sobre l. Tambin podemos llamar a otros mtodos como delete y
rename para cambiar el fichero de alguna forma. Por supuesto, podramos leer o
grabar el fichero utilizando una de las clases lectoras o escritoras proporcionadas
por el JDK.

Los JFileChooser tambin se pueden personalizar de manera que se puede aadir


un filtro de ficheros mostrndose nicamente los que cumplan esta condicin o bien
previsualizando su contenido, en este caso las imgenes se muestran a la derecha
del componente.

Jess Cceres Tello Pg. 36 - 54


Curso de Java

Mtodos constructores

Mtodos Descripcin

JFileChooser()
JFileChooser(File, FileSystemView)
JFileChooser(File) Crea un ejemplar de JFileChooser.
JFileChoose r(FileSystemView)
JFileChooser(String, FileSystemView)
JFileChooser(String)

Jess Cceres Tello Pg. 37 - 54


Curso de Java

Principales mtodos

Mtodos Descripcin

int showOpenDialog(Component)
Muestra un dilogo modal conteniendo el
int showSaveDialog(Component)
selector de ficheros
int showDialog(Component, String)

void setCurrentDirectory(File) Selecciona u obtiene el directorio cuyos ficheros


File getCurrentDirectory se estn mostrando en el selector de ficheros.

Cambia la lista para mostrar el directorio padre


void changeToParentDirectory()
del directorio actual.

Comprueba el sistema de ficheros y actualiza la


void rescanCurrentDirectory()
lista del selector.

void setFileSelectionMode(int) Selecciona el modo de seleccin de ficheros. Los


int getFileSelectionMode() valores aceptables son FILES_ONLY,
boolean isDirectorySelectionE nabled() DIRECTORIES_ONLY, y
boolean isFileSelectionEnabled() FILES_AND_DIRECTORIES.

void setMultiSelectionEnabled(boolean) Selecciona u obtiene si se pueden seleccionar


boolean isMultiSelectionEnabled() varios ficheros a la vez.

void setSelectedFile(File) Selecciona u obtiene el fichero actualmente


File getSelectedFile() seleccionado.

void setSelectedFiles(File[]) Selecciona u obtiene los ficheros actualmente


File[] getSelectedFiles() seleccionados.

Jess Cceres Tello Pg. 38 - 54


Curso de Java

Selector de color: JColorChooser

La clase JColorChooser proporciona a los usuarios una paleta para elegir colores.
Un selector de color es un componente que se puede situar en cualquier lugar
dentro del GUI de un programa. El API de JColorChooser tambin hace sencillo
desplegar un dilogo (modal o no) que contiene un selector de color.

Aqu tienes una imagen de una aplicacin que utiliza un selector de color para
seleccionar el color de fondo de un banner:

Un selector de color utiliza un ejemplar de ColorSelectionModel para contener y


manejar la seleccin actual. Este dispara un evento "change" si el usuario cambia el
color del selector. El programa de ejemplo registra un oyente de "change" con el
ColorSelectionModel para poder actualizar el banner de la parte superior de la
ventana.

...

// Creacin del objeto con el color de forndo inicial del baner


final JColorChooser tcc = new JColorChooser([Link]());
[Link]().addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
Color newColor = [Link]();
[Link](newColor);
}
}
);
...
Ejemplo 5.17: Cdigo de creacin del objeto y del escuchador de eventos asociado.

Jess Cceres Tello Pg. 39 - 54


Curso de Java

Mtodos constructores

Mtodos Descripcin

Crea un selector de color. El constructor por


defecto crea un selector de color con el color
JColorChooser() inicial blanco. Se utiliza el segundo constructor
JColorChooser(Color) para especificar un color inicial diferente. El
JColorChooser(ColorSelectionModel) argumento, ColorSelectionModel, cuando est
presente, proporciona un selector de color con
un modelo de seleccin de color.

Principales mtodos

Mtodos Descripcin

Crea y muestra un selector de color en un dilogo


modal. El argumento Component es el padre del
Color showDialog(Component,
dilogo, el argumento String especfica el ttulo del
String, Color)
dilogo, y el argumento Color el color seleccionado
inicialmente.

Crea un dilogo para el selector de color especificado.


Como en showDialog, el argumento Component es
JDialog createDialog(Component,
el padre del dilogo y el argumento String especfica el
String, boolean, JColorChooser,
ttulo del dilogo. El argumento boolean especifica si
ActionListener, ActionListener)
el dilogo es modal. El primer ActionListener es para
el botn OK, y el segundo para el botn Cancel.

Selecciona u obtiene el componente utilizado para


previsionar la seleccin de color. Para eleminar el panel
void setPreviewPanel(JComponent)
de previsionado, se utiliza new JPanel(). Para
JComponent getPreviewPanel()
especificar el panel de previsionado por defecto, se
utiliza null.

void
setChooserPanels(AbstractColorCho
oserPanel[]) Selecciona u obtiene los paneles selectores en el
selector de color.
AbstractColorChooserPanel[]
getChooserPanels()

Jess Cceres Tello Pg. 40 - 54


Curso de Java

void
addChooserPanel(AbstractColorCho
oserPanel)
Aade o elimina un panel selector en el selector de
color.
AbstractColorChooserPanel
removeChooserPanel(AbstractColor
ChooserPanel)

void setColor(Color)
Selecciona u obtiene el color seleccionado actualmente.
Los tres argumentos enteros de setColor especifican
void setColor(int, int, int)
los valores RGB del color. El nico argumento entero de
setColor tambin especfica el color en RGB. Los 8 bits
void setColor(int)
de mayor peso especifican el rojo, los 8 bits siguientes
el verde, y los 8 bits de menor peso el azul.
Color getColor()

void
setSelectionModel(ColorSelectionMo Selecciona u obtiene el modelo de seleccin para el
del) selector de color. Este objeto contiene la seleccin
actual y dispara eventos change para los oyentes
ColorSelectionModel registrados si la seleccin cambia.
getSelectionModel()

Barras de Herramientas: JToolBar

Un objeto JToolBar crea una barra de herramientas con iconos, dentro de una fila
o una columna. Normalmente las barras de herramientas proporcionan acceso a
funcionalidades que tambin se encuentran en tems de mens.

Ejemplos de JToolBar con la barra de herramientas flotante por defecto

Jess Cceres Tello 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.

Diferencia entre una JToolBar floatable y otra que no lo es

Mtodos constructores

Mtodos Descripcin

JToolBar() Crea una barra de herramientas.

Aade un componente (normalmente un botn) a


JButton add(Action) la barra de herramientas. Si el argumento de add
Component add(Component) es un objeto Action, la barra de herramientas
crea automticamente un JButton y lo aade.

Aade un separador al final de la barra de


void addSeparator()
herramientas.

La propiedad floatable es true por defecto, para


indicar que el usuario puede arrastrar la barra de
void setFloatable(boolean)
herramientas a una ventana separada. Para
boolean isFloatable()
desactivar el arrastre de la barra de herramientas
se utiliza [Link](false).

Jess Cceres Tello Pg. 42 - 54


Curso de Java

import [Link];
import [Link];

import [Link].*;

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() {
[Link](BNuevo);
[Link](BAbrir);
[Link](BGuardar);
[Link]();
[Link](BCopiar);
[Link](BCortar);
[Link](BPegar);
[Link] ("Guardar");
[Link] ("Nuevo");
[Link] ("Abrir");
[Link] ("Copiar");
[Link] ("BCortar");
[Link] ("Pegar");
add(TBarra,"North");

[Link](true);
setTitle("Ejemplos JToolBar");
setSize(800,600);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0); }
});
}
[Link] public
rboles: JTree
static void main (String []args){
new ejemploJToolBar();
}
}

Ejemplo 5.18: Creacin de una barra de herramientas en una aplicacin

Jess Cceres Tello 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.

Jess Cceres Tello Pg. 44 - 54


Curso de Java

import [Link];
import [Link].*;
import [Link].*;
import [Link].*;

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 >= [Link]) 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 [Link];
}

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< [Link] ; i++)
if ([Link](hijos[i])) return i;
return -1;
}

public boolean isLeaf(Object node) {


return ((File)node).isFile();
}

public void valueForPathChanged(TreePath path, Object newValue) {}


public void addTreeModelListener(TreeModelListener l) {}
public void removeTreeModelListener(TreeModelListener l) {}
};

JTree jt = new JTree(tm);


JScrollPane jsp = new JScrollPane(jt);
getContentPane().add(jsp);
pack();
setVisible(true);
}

public static void main(String args[]) {


ejemploArbol t = new ejemploArbol();
}
}

Ejemplo 5.19: Visualizacin de un rbol de directorios con JTree

Jess Cceres Tello Pg. 45 - 54


Curso de Java

Laboratorio

Para el desarrollo de un editor de texto simple se ha diseado la siguiente pantalla:

Para entender mejor la estructura que se desea hacer se muestra a continuacin el


diagrama de componentes de esta pantalla:

Jess Cceres Tello Pg. 46 - 54


Curso de Java

La codificacin de estos componentes sera de la siguiente forma:

/*****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
[Link](newMenu);
[Link](openMenu);
[Link](saveMenu);
[Link]();
[Link](exitMenu);
//Agrega el menu a la barra de menu
[Link](fileMenu);
//Setea esa bara de menu para el frame
[Link](menuBar);

/*****JToolBar*****/
toolBar = new JToolBar();
//Crea los botones asignando sendas imgenes y los agrega al toolbar
openButton = new JButton();
[Link](new ImageIcon(getClass().getResource("/[Link]")));
[Link](new Insets(0, 0, 0, 0));
[Link](openButton);

saveButton = new JButton();


[Link](new ImageIcon(getClass().getResource("/[Link]")));
[Link](new Insets(0, 0, 0, 0));
[Link](saveButton);

//agrega un separador en la toolbar


[Link]();

copyButton = new JButton();


[Link](new ImageIcon(getClass().getResource("/[Link]")));
[Link](new Insets(0, 0, 0, 0));
[Link](copyButton);

cutButton = new [Link]();


[Link](new ImageIcon(getClass().getResource("/[Link]")));
[Link](new Insets(0, 0, 0, 0));
[Link](cutButton);

pasteButton = new [Link]();


[Link](new ImageIcon(getClass().getResource("/[Link]")));
[Link](new Insets(0, 0, 0, 0));
[Link](pasteButton);

//Agrega el toolbar en el norte del contenedor


[Link]().add(toolBar, [Link]);

...

Jess Cceres Tello Pg. 47 - 54


Curso de Java

...

/*****Status bar*****/
statusPanel = new JPanel();
[Link](new BorderLayout());
//crea las etiquetas para la barra de estado
statusMsg1 = new JLabel("Estado: ");
statusMsg2 = new JLabel();
[Link](statusMsg1, [Link]);
[Link](statusMsg2, [Link]);
//Agrega el panel de satus al sur del contenedor
[Link]().add(statusPanel, [Link]);

/*****Text Editor*****/
editPane = new JEditorPane();
[Link]("");
scrollPaneRight = new JScrollPane(editPane);

/*****List*****/
list=new JList();
scrollPaneLeft=new JScrollPane(list);
openSelectedButton=new JButton("Abrir");

/*****leftPanel*****/
leftPanel=new JPanel(new BorderLayout());
[Link](scrollPaneLeft,[Link]);
[Link](openSelectedButton,[Link]);

/*****Split Panel*****/
//Define un contenedor con division izq-der
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
[Link](scrollPaneRight);
[Link](leftPanel);
[Link]().add(splitPane, [Link]);

Jess Cceres Tello Pg. 48 - 54


Curso de Java

Como prctica avanzada haremos un visor de imgenes llamado lbum de Fotos.


Para ello definiremos dos clases: AlbumFrame y Album. El primero definir la
funcionalidad de la aplicacin mientras que el segundo definir la apariencia de la
pantalla de la aplicacin.

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link] .*;

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) {
[Link]();
}
}
private void jbInit() throws Exception {
ScanAlbum();
[Link]().setLayout(borderLayout1);
[Link](new Dimension(800, 600));
[Link]([Link]);
[Link]("Album");
[Link]("Archivo");
[Link]("Salir");
[Link]("Go!!");
...

Jess Cceres Tello Pg. 49 - 54


Curso de Java

...

[Link](new Color(255, 183, 0));


[Link](new Color(255, 183, 0));
[Link](new Color(255, 183, 0));
[Link]("<<");
[Link](">>");
[Link](menuFileExit);
[Link](menuFile);
[Link](new Color(255, 183, 0));
[Link](menuBar1);
[Link](jComboBox1, null);
[Link](jButton1, null);
[Link](new Color(255, 183, 0));
[Link]().add(toolBar, [Link]);
[Link]().add(jPanel1, [Link]);
[Link](jLabel1, null);
[Link]().add(jPanel2, [Link]);
[Link](jButton2, null);
[Link](jButton3, null);
cargarAlbum();
//-------------- SALIR DEL PROGRAMA -----------------------
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileExit_ActionPerformed(e);
}
});
//-------------- FUNCION DEL GO!! -----------------------
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
cargarAlbum();
}
});
//-------------- ADELANTAR FOTO -----------------------
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
fotoAdelante();
}
});
//-------------- ATRASAR FOTO -----------------------
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
fotoAtras();
}
});
}
void fileExit_ActionPerformed(ActionEvent e) {
[Link](0);
}

void buttonClose_actionPerformed(ActionEvent e) {

void ScanAlbum(){

File[] album = [Link]();


for (int i=0; i<[Link]; i++)
if (album[i].isDirectory())
[Link](album[i].getName());
}

...

Jess Cceres Tello Pg. 50 - 54


Curso de Java

...

void cargarAlbum(){
[Link]();
index = 0;
String album = (String)[Link] dItem();
File albumCarpeta = new File (album);
folder = [Link]();
[Link]([Link]());
File[] fotos = [Link]();
for (int i=0; i<[Link]; i++)
if (fotos[i].isFile()){
[Link](fotos[i].getName());
[Link](fotos[i].getName());
}
ImageIcon imagen = new ImageIcon(folder+"\\"+(String)[Link](0));
[Link](imagen);
}

void fotoAdelante(){
[Link]("Adelante ..");
if ((index+1) < [Link]()){
index++;
ImageIcon imagen = new
ImageIcon(folder+"\\"+(String)[Link](index));
[Link](imagen);
[Link](index + " : " + folder+"\\"+(String)[Link](index));
}
else
{
[Link](null, "Fin de las Fotos del
Album","Atencion",JOptionPane.OK_OPTION );
}
}
void fotoAtras(){
[Link]("Atras ..");
if ((index-1) > -1){
index--;
ImageIcon imagen = new
ImageIcon(folder+"\\"+(String)[Link](index));
[Link](imagen);
[Link](index + " : " + folder+" \\"+(String)[Link](index));
}
else {
[Link](null, "Fin de las Fotos del
Album","Atencion",JOptionPane.OK_OPTION );
}
}

Jess Cceres Tello Pg. 51 - 54


Curso de Java

En el siguiente ejemplo se muestra la utilizacin de un JSlider para la ampliacin o


disminucin de una figura geomtrica, un valo para ser ms exactos. Para ello
utilizaremos dos clases; PanelOvalo que ser el panel que muestre la figura en
pantalla y DemoSlider que ser la clase que, heredando de la clase JFrame,
mostrar la pantalla con los paneles y componentes definidos.

// Una clase JPanel personalizada.


import [Link].*;
import [Link].*;

public class PanelOvalo extends JPanel {


private int diametro = 10;
// dibujar un valo del dimetro especificado
public void paintComponent( Graphics g ) {
[Link]( g );
[Link]( 10, 10, diametro, diametro );
}
// validar y establecer el dimetro, despus repintar
public void establecerDiametro( int nuevoDiametro ) {
// si el dimetro es invlido, usar valor predeterminado de 10
diametro = ( nuevoDiametro >= 0 ? nuevoDiametro : 10 );
repaint();
}
// utilizado por el administrador de esquemas para determinar el tamao preferido
public Dimension getPreferredSize() {
return new Dimension( 200, 200 );
}
// utilizado por el administrador de esquemas para determinar el tamao mnimo
public Dimension getMinimumSize() {
return getPreferredSize();
}
} // fin de la clase PanelOvalo

Jess Cceres Tello Pg. 52 - 54


Curso de Java

// Uso de objetos JSlider para ajustar el tamao de un valo.


import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class DemoSlider extends JFrame {


private JSlider sliderDiametro;
private PanelOvalo miPanel;

// configurar GUI
public DemoSlider() {
super( "Demostracin de JSlider" );

// establecer PanelOvalo
miPanel = new PanelOvalo();
[Link]( [Link] );

// establecer objeto JSlider para controlar el valor del dimetro


sliderDiametro = new JSlider( [Link], 0, 200, 10 );
[Link]( 10 );
[Link]( true );

// registrar componente de escucha de eventos de JSlider


[Link](

new ChangeListener() { // clase interna annima

// manejar cambio en el valor del control deslizable


public void stateChanged( ChangeEvent e ) {
[Link]( [Link]() );
}

} // fin de la clase interna annima

); // fin de la llamada a addChangeListener

// adjuntar componentes al panel de contenido


Container contenedor = getContentPane();
[Link]( sliderDiametro, [Link] );
[Link]( miPanel, [Link] );

setSize( 220, 270 );


setVisible( true );

} // fin del constructor de DemoSlider

Ejercicios
public static void main( String args[] ) {
DemoSlider aplicacion = new DemoSlider();
[Link]( JFrame.EXIT_ON_CLOSE );
}

} // fin de la clase DemoSlider

Jess Cceres Tello Pg. 53 - 54


Curso de Java

Ejercicios

Realizar una aplicacin que muestre el siguiente aspecto:

Jess Cceres Tello Pg. 54 - 54

También podría gustarte