Anda di halaman 1dari 38

Swing de Java

Swing se presenta como una mejora del AWT, entre estas mejoras cabe destacar:

Apariencia independiente de la plataforma: Uno de los principales problemas de AWT


es que los componentes grficos son generados por el sistema operativo, lo que hace
que la apariencia de las aplicaciones sea bastante dependiente de ste. Los
componentes swing son en este sentido autnomos, adaptndose dinmicamente al
sistema operativo y plataforma en que est corriendo.
Mayor nmero de componentes grficos: El juego de controles grficos
proporcionados por swing es mucho mayor que el de AWT, lo que permite crear
aplicaciones mucho ms potentes desde el punto de vista de la presentacin.
Mejora de los componentes clsicos: Adems de proporcionar un mayor nmero de
controles, swing tambin introduce sustanciales mejoras en los controles (botones,
cajas de texto, listas, etc), dotndolos de un mayor nmero de mtodos y posibilidades
de presentacin.
Por lo dems no hay que olvidar que swing es una extensin de AWT, por lo que los principios
de funcionamiento son los mismos. La mecnica para la construccin de la interfaz grfica y el
modelo de gestin de eventos son idnticos a los empleados con AWT.

Contenedores
Pueden contener objetos y otros contenedores. Son de dos tipos:
- Superiores: JApplet, JFrame, JDialog
- Intermedios : JPanel, JScrollPane, JSplitPane, JTabbedPane, JToolBar y otros ms
especializados
Componentes
Aspecto visible de la interfaz. Etiquetas, campos de texto, botones, listas etc. Se situan dentro
de un contenedor.

1) Objeto JFrame
Es un contenedor de Objetos. Y tienen las siguientes caractersticas.
Los objetos JFrame tienen habilitado el botn de cierre de la ventana. Esto significa
que no es necesario programar el suceso cerrando la ventana en las ventanas swing.
El comportamiento por defecto de este botn es provocar el cierre de la venta.
Los controles swing no se aaden directamente al objeto JFrame. Un objeto JFrame
incluye un contenedor interno conocido como panel de contenido, donde se deben
situar los componentes visuales de la Interfaz. En este objeto donde habr que agregar
los controles y sobre el que habr que definir el gestor de organizacin a utilizar. Para
obtener el panel de contenido de una ventana swing, utilizaremos el mtodo
getContentPane() de JFrame:
Container getContentPane()
Mtodos de los Objetos JFrame

setSize(int ancho, int alto) : Establece el tamao dado el ancho y alto del JFrame en pixels
setLocation(int x, int y): Coloca el JFrame en las coordenadas x e y con respect o a la Pantalla.
setVisible(boolean b) : Establece si se puede ver el JFrame o no.
setDefaultCloseOperation(int cte): Establece que es lo que se va hacer cuando el JFrame se
cierra:
El metodo setDefaultCloseOperation puede tomar uno de los siguientes valores staticos de la
clase JFrame:
- WindowConstants.DO_NOTHING_ON_CLOSE: No hace nada
- WindowConstants.HIDE_ON_CLOSE (the default). Oculta el objeta despues de invocar
algun objeto WindowListener registrado.
- WindowConstants.DISPOSE_ON_CLOSE. Oculta y libera el JFrame despues de invocar
algun objeto WindowListener.
- JFrame.EXIT_ON_CLOSE. Termina la aplicacion
setTitle(String titulo): Establece el titulo del JFrame.

Para colocar un JFrame en NetBeans, en el paquete que se quiere crear, hacer clic en el botn
derecho y luego : New->JFrameForm
Luego colocar el nombre del JFrame y hacer clic en Finish

Luego Establecermos la manera de colocar objetos, el Layout a AbsoluteLayout. Boton Derecho


en el JFrame y luego seleccionar : SetLayout->AbsoluteLayout
En el constructor de la Clase FrmSaludo colocamos el siguiente cdigo:

public FrmSaludo()
{
initComponents();
setSize(400,300);
setLocation(300,200);
getContentPane().setBackground(Color.cyan);
setVisible(true);
}

En la clase Main en el mtodo main colocamos el siguiente cdigo

public class Main {


public static void main(String[] args) {
FrmSaludo frm = new FrmSaludo();
}
}

Al ejecutar el Programa se obtendr:


Centrar una ventana en la Pantalla
Si se desea una ventana centrada con respecto a la pantalla debemos utilizar el paquete awt y
el siguiente cdigo

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;

public class FrmVentanaCentrada extends javax.swing.JFrame {

public FrmVentanaCentrada ()
{
initComponents();
// Establecemos el tamao de la ventana
setSize(400,300);
Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
// Se obtienen las dimensiones en pixels de la ventana.
Dimension ventana = getSize();
// Una cuenta para situar la ventana en el centro de la pantalla.
setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2);

// Se visualiza la ventana.
setVisible(true);
}

Colocar un JFrame del tamao de la Pantalla


Se debe colocar el siguiente cdigo;

public class FrmVentaCompleta extends javax.swing.JFrame {


public FrmVentanaCompleta()
{
initComponents();
Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
Dimension ventana = getSize();
setLocation(0,0);
setSize(pantalla.width, pantalla.height);
setVisible(true);
}
2) Objeto JLabel (etiqueta)
Un rea de visualizacin para un breve texto cadena o una imagen, o ambos. Una etiqueta no
reacciona a la entrada eventos. Como resultado, no puede conseguir el foco del teclado.

Constructores de la clase JLabel


JLabel(): Crea una etiqueta con una cadena vacia.
JLabel(String text): Crea una etiqueta con texto que se le coloca como parametro.
JLabel(Icon image): Crea una etiqueta con una imagen que se especifica.
JLabel(Icon image, int horizontalAlignment): Crea una etiqueta con una imagen estableciendo
el alineamiento horizontal.
JLabel(String text, Icon icon, int horizontalAlignment): Crea una etiqueta con una imagen y un
texto y alinemiento horizontal
JLabel(String text, int horizontalAlignment): Crea una etiqueta con un texto especifico y
alineamiento horizontal.

Metodos de la clase JLabel


void setText (String s); Coloca un texto en la etiqueta.
String getText ( ): Devuelve el texto que contiene la etiqueta
void setBackground (Color c): Asigna el color de fondo.
void setFont (Font f): Establece el tipo de letra en el texto de la etiqueta
void setIcon(Icon i): Especifica el icono utilizado (objeto ImageIcon).
void setOpaque(Boolean b): Si es true, la etiqueta es opaca.
void setVerticalAlignment(int verticalAlignment): Establece la forma de alineamiento vertical,
que puede ser:
SwingConstants.TOP
SwingConstants.CENTER
SwingConstants.BOTTOM

3) Objeto JTextField (Campos de Texto)

Las instancias de la clase JTextField representan campos de Texto editables ( en una sola fila),
en la que los usuarios pueden escribir.

Constructores de la clase JTextField


JTextField() : Construye un campo de texto vacio.
JTextField(int columns) : Consturye un campo de texto vacio con un numero especificado de
columnas.
JTextField(String text): Construye un campo de texto inicializado un un texto especifico
JTextField(String text, int columns) : Construye un campo de texto inicializado cob un texto y
con un numero especifico de columnas.

Metodos de la clase JTextField


void setText(String cadena): Coloca una cadena en el campo de texto.
String getText(): Devuelve el texto contenido en el campo de texto.
void setEditable(boolean b): Establece si la caja de texto es editable.

4) Objeto JPasswordField
Swing proporciona la clase JPasswordField, una subclase de JTextField, que se usa en lugar de
un campo de texto cuando el texto introducido por el usuario es una password. Por razones de
seguridad, un campo de password no muestra los caracteres que teclea el usuario. En su lugar
el campo muestra otro caracter, como un asterisco "*".

Constructores del JPasswordField


JPasswordField(): Construye un JPasswordField por defecto
JPasswordField(int columns) : Construye un JPasswordField() con un numero especifico de
columnas .
JPasswordField(String text): Construye un JPasswordField inicializado con un texto.
JPasswordField(String text, int columns) : Construye un JPasswordFields inicializado con texto
y un numero de columnas.
Metodos del JPasswordField
char[] getPassword() : Retorna el texto contenido en el JPasswordField.
char getEchoChar(): Retorna el carcter que se muestra en el JPasswordField.
void setEchoChar(char c) : Establece el caracer que se muestra el JPasswordField.
void setPassword(String): Establece el texto del JPasswordField.

5) El Objeto JTextArea
Permite crear campos de Texto con varias filas y columna, en los que se pueden escribir texto
sin formato.
Constructores del JTextArea
JTextArea(): Crea un Nuevo JTextArea.
JTextArea(int rows, int columns): Construye un JTextArea vacio con numero de filas y
columnas.
JTextArea(String text): Construye un JTextArea con texto pasado como parametro.
JTextArea(String text, int rows, int columns): Construye un JTextArea con un texto especifico y
un numero de columnas.

Metodos del Objeto JTextArea


void setText(String s): Establece el texto que se va a colocar en el JTextArea.
String getText(): Devuelve el texto que contiene el JTextArea.
void append(String s): Aade un texto al final del que ya existe.
void sedEditable(boolean b): Establece si se puede editar o no.
int getColumns(): Devuelve el numero de columnas del JTextArea.
int getRows(): Devuelve el numero de filas del JTextArea.
void setColumns(int columns): Establece el numero de columnas para el JTextArea.
void setFont(Font f): Establece el Font del JTexArea.
void setRows(int rows): Establece el numero filas para el JTextArea.
String getSelectedText(): Devuelve el texto seleccionado en el JTextArea.
void insert(String s, int pos): Inserta un texto en una posicion determinada.
void replaceRange(String s, int inicio, int fin): Reemplaza el texto en el rango dado.

6) Objeto JButton
El Objeto JButton es uno de los mas utilizados, cuando se hace clic se realizan un conjunto de
acciones.
Constructores de la clase JButton
JButton(): Crea un boton sin texto ni icono
JButton(Icon icon): Crea un boton y coloca una imagen.
JButton(String text): Crea un boton y coloca un texto.
JButton(String text, Icon icon): Crea un boton con texto e imagen.
Metodos del Objeto JButton
void setText (String s); Coloca un texto en el botn
String getText ( ): Devuelve el texto que contiene el Boton
void setBackground (Color c): Asigna el color de fondo.
void setFont (Font f): Establece el tipo de letra en el texto del boton
void setIcon(Icon i): Especifica el icono utilizado (objeto ImageIcon).
void setOpaque(Boolean b): Si es true,el botn es opaco.
void setVerticalAlignment(int verticalAlignment): Establece la forma de alineamiento vertical,
que puede ser:
SwingConstants.TOP
SwingConstants.CENTER
SwingConstants.BOTTOM
Programa para crear la clase Rectangulo y calcular el Area, perimetro y la diagonal. Use
Interfaces graficas de usuario
7) Objeto JList
Representa un tipo de lista en la que los elementos estn siempre visibles, permitiendo tanto
la seleccin simple de los mismos (un nico elemento) como la mltiple (ms de un elemento).
Constructores del JList
JList(Object [] elementos): La lista se cargar con los objetos indicados en el array que
se suministra como parmetro. Cada elemento que se muestra en la lista representa el
valor devuelto por la llamada al mtodo toString del Objeto.
JList(Vector elementos): En este caso la lista se cargara con los objetos almacenados en el
Vector que se suministra como parmetro.
JList(ListModel modelo): En general, podemos indicar los elementos a visualizar en un JList
a travs de un objeto ListModel.
JList(): Con este constructor crearamos una lista vacia. Para rellenarla posteriormente
desde algn punto de la aplicacin deberamos recurrir al objeto setModel(ListModel
datos) del objeto JList. En este caso, no podramos utilizar un Vector para la carga de la
lista, sino que tendramos que hacerlo a travs de un objeto cuya clase implementase la
interfaz ListModel.

La Interfaz ListModel
La interfaz ListModel define una serie de mtodos que permiten indicar a una lista la
forma de recuperar los datos que se van a mostrar en su interior. Esto implica que un objeto
ListModel no tiene porque ser necesariamente una coleccin, tan solo tendr que especificar a
travs de los mtodos implementados el mecanismo de obtencin de los datos de la lista.
El paquete javax.swing contiene dos implementaciones de esta interfaz que pueden
ser utilizadas por el programador para definir el modelo de datos:
AbstractListModel : Representa una implementacin por defecto de ListModel. Si
pretendemos crear nuestra propia implementacin de ListModel, puede resultar ms
conveniente heredar esta clase que implementar la propia interfaz, ya que los nicos
mtodos de ListModel que a un programador le puede interesar sobreescribir son:
o int getSize(): Debe devolver el nmero de elementos de la lista.
o Object getElementAt(int index): Devolvera el elemento que ocupe la posicin
indicada en el index
DefaultListModel: Representa una clase de Coleccin especfica para controles JList,
proporcionando todos los mtodos necesarios para manipular la coleccin. El
funcionamiento de esta clase es similar a Vector, de hecho, su funcionalidad est
implementada internamente mediante a un Vector.
En el siguiente bloque de instrucciones de ejemplo se crea un objeto JList en el que se
visualizarn los das de la semana almacenados en una coleccin DefaultListModel

DefaultListModel modelo = new DefaultListModel();


modelo.addElement(lunes); modelo.addElement(Martes);
modelo.addElement(Miercoles); modelo.addElement(Jueves);
modelo.addElement(Viernes); modelo.addElement(Sabado);
modelo.addElement(Domingo);

JList das= new JList(modelo);


Agregar un JList a la Ventana
Para agregar un JList a un contenedor se procede exactamente igual que el resto de los
controles.
No obstante, en el caso de una lista puede ocurrir que, debido a su tamao, no sea capaz de
mostrar al mismo tiempo todos los elementos almacenados, por lo que puede ser conveniente
dotar a la lista de barras de desplazamiento para poder acceder a todo su contenido. Esto se
consigue aadiendo a la lista un panel de scroll (JScrollPane) en vez de colocarlo directamente
en el panel de contenido de la ventana, posteriormente, ser el objeto JScrollPane el que se
aada a dicho panel de contenido.
JSrollPane jp = new JScrollPane(das);
getContenPane().add(jp);
Manipulacion del Contenido de un JList
La clase JList proporciona mtodos que nos permiten obtener informacin de la lista en tiempo
de ejecucin como son:
int getSelectedIndex(): Devuelve el ndice del elemento seleccionado. Si no hay ningn
elemento seleccionado devolver el valor -1.
Object getSelectedValue(): Devuelve el objeto seleccionado. Si no hay ningn
elemento seleccionado devolver null.
int [] getSelectedIndices(): En caso de que se permita la seleccin mltiple en una lista
este mtodo devuelve un array con los ndices de los elementos seleccionados.
Object [] getSelectedValues(): Devuelve un array con los objetos seleccionados en los
casos de seleccin mltiple.
Sin embargo, la clase JList no dispone de mtodos para alterar su contenido. Si queremos
aadir nuevos elementos a la lista, modificar o eliminar los ya existentes, debemos hacerlo a
travs del objeto ListModel que define el modelo de contenido de la lista. En el caso de utilizar
un objeto de tipo DefaultListModel los mtodos que nos permitirn realizar estas operaciones
son:
void addElement(Object elem): Aade a la lista el objeto indicado.
void add(int index, Object elem): Inserta el elemento en la posicin especificada
Object get(int index): Devuelve el elemento que ocupa la posicin especificada.
int getSize(): Devuelve el nmero total de elementos de la coleccin.
Object remove(int index): Elimina el elemento que ocupa la posicin indicada
devolviendo el objeto.
void removeElementAt(int index):Elimina el elemento que ocupa la posicin indicada.
void removeAllElements(): Elimina todos los elementos de la lista.
Por ejemplo, si en el JList das del ejemplo anterior queremos colocar el sbado despus del
lunes, deberamos realizar lo siguiente:
String dia = (String) modelo.get(5);
modelo.add(1,dia);
modelo.remove(5);
Cualquier cambio que ser realice a travs del objeto ListModel se reflejar inmediatamente en
el control JList. Sin embargo, no sucede lo mismo cuando la fuente de datos es un vector o un
array de Objetos, en este caso, ser necesario refrescar la pantalla para que los cambios
realizados en el Vector a array se reflejen en la lista
SELECCIN EN UNA LISTA: Evento ListSelectionEvent
Cuando se produce la seleccin de un elemento en una lista de tipo JList, esto provoca un
evento de tipo ListSelectionEvent, cuyo mtodo de respuesta se encuentra en la interfaz
ListSelectionListener. Ambos estn incluidos en el paquete javax.swing.event.

Ejemplo:
1) Se tiene una lista de Nombres, al seleccionar un nombre de la lista este se mostrara en
una etiqueta.

Para agregar elementos en una lista en tiempo de Diseo se escoge en la Ventana de


Propiedades la propiedad model y se hace clic en la parte derecha

Se escribe el Item que se quiere agregar y presionar Add. Una vez terminada de agregar los
Items presionar OK
Como vamos a seleccionar un elemento de la lista, entonces vamos a utilizar el evento
ListSelectionEvent para lo cual hacemos lo siguiente. Seleccionamos la lista, luego clic derecho
Events->ListSelection ->valuechanged

package proyectojlist;
import javax.swing.*;
import javax.swing.event.*;
public class FrmJList extends javax.swing.JFrame {
public FrmJList() {
initComponents();
setSize(400,300);
setLocation(300,200);
setVisible(true);
}
private void LstNombresValueChanged(javax.swing.event.ListSelectionEvent evt) {
String nombre=LstNombres.getSelectedValue().toString();
lblnombre.setText(nombre);
}
}

2) Crear una lista de ciudades y tener botones para agregar elementos a la lista, eliminar
un elemento de la lista y limpiar los elementos de la lista

En este ejemplo vamos a utilizar un DefaultListModel para manipular los datos de una lista,
Para esto hacemos lo siguiente.
En la ventana de Propiedades escogemos la propiedad model.
Hacemos clic en la parte derecha y nos sale la siguiente Ventana:

En la parte donde dice lstCiudads model property using: en el combo escogemos la opcin
custom code
Y en la opcin que dice lstCiudad.setMode colocamos el nombre del modelo que hemos
creado, en nuestro ejemplo se llama modelo.

En nuestro Ejemplo como se ve el cdigo debemos crear un objeto de la clase


DefaultListModel , como se ve este objeto se llama modelo.

package proyectojlist;
import javax.swing.*;

public class FrmJList02 extends javax.swing.JFrame {


private DefaultListModel modelo= new DefaultListModel();
public FrmJList02() {
initComponents();
setSize(300,300);
setLocation(300,200);
setVisible(true);
}

private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt)


{
String ciudad=txtCiudad.getText();
if(ciudad.compareToIgnoreCase("")!=0)
{
modelo.addElement(ciudad);
txtCiudad.setText("");
txtCiudad.requestFocus();
}
else
JOptionPane.showMessageDialog(null, "No se ha ingresado elemento");
}
private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {
int i=lstCiudad.getSelectedIndex();
if(i!=-1)
modelo.removeElementAt(i);
else
JOptionPane.showMessageDialog(null, "No se ha seleccionado elemento");
}

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {


txtCiudad.setText("");
modelo.removeAllElements();
txtCiudad.requestFocus();
}

private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {


dispose();
}

Ejemplo 3:
Ingresar nmeros a una lista y calcular la suma y el promedio.
package proyectojlist;
import javax.swing.*;

public class FrmJList03 extends javax.swing.JFrame {


private DefaultListModel modelo= new DefaultListModel();

public FrmJList03() {
initComponents();
setSize(400,300);
setLocation(300,200);
setVisible(true);

}
private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {
String numero=txtNumero.getText();
if(numero.compareToIgnoreCase("")!=0)
{
modelo.addElement(numero);
txtNumero.setText("");
txtNumero.requestFocus();
}
else
JOptionPane.showMessageDialog(null, "No se ha ingresado elemento");
}

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {


int n,i;
double s=0,prom,x;
n=modelo.size();
for(i=0;i<n;i++)
{
x=Double.parseDouble(modelo.get(i).toString());
s= s +x;
}
prom=s/n;
txtSuma.setText(String.valueOf(s));
txtPromedio.setText(String.valueOf(prom));
}

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {


txtNumero.setText("");
modelo.removeAllElements();
txtSuma.setText("");
txtPromedio.setText("");
txtNumero.requestFocus();
}
private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}

8) El Objeto JComboBox
Un JComboBox representa una lista desplegable donde los elementos de la misma estn
ocultos, visualizndose al activar el botn de despliegue de la lista

Constructores de un JComboBox

Al igual que un JList, la clase JComboBox dispone de cuatro constructores, uno sin parmetros
que se utiliza para crear una lista vacia y otros tres que permiten cargar un contenido inicial en
la misma:

JComboBox(). Con este constructor crearamos una lista vacia.


JComboBox(Object [] elementos): Cargara la lista con los datos del array.
JComboBox(Vector elementos): Caragara la lista con los datos del Vector.
JComboBox(ComboBoxModel modelo): A travs de la interfaz ComboBoxModel se indicara a
la lista la forma de obtener los elementos.

Manipulacion del Contenido de un JComboBox


Los mtodos que nos permiten obtener informacin sobre el JComboBox en tiempo de
ejecucin son los siguientes.
int getSelectedIndex(): Devuelve el ndice del elemento Seleccionado
Object getSelectedItem(): Devuelve el elemento seleccionado
Object getItemAt(int index): Devuelve el elemento que ocupa la posicin indicada.
Int getItemCount(): Devuelve el nmero de elementos de la lista
void addItem(Objecto elemento): Aade un elemento a la lista
void removeItemAt(int index): Elimina el elemento que indica la posicin
void removeAllItems(): Elimina todos los elementos de la lista

Seleccin en un JComboBox: Evento ItemEvent

La seleccin de un elemento en una lista desplegable provoca un evento ItemEvent siendo


ItemListener la interfaz de escucha que define el mtodo de respuesta a dicho evento. Este se
encuentra definido en el paquete java.awt.event

Ejemplo:
Se tienen una lista de artculos con sus respectivos precios
Radio 50
Television 300
Refrigeradora 600
DVD 150
Escoger un articulo y mostrar el precio. Luego ingresar la cantidad del articulo a comprar y
calcular el monto total.
Para colocar los Items del JComboBox, seleccionamos el objeto JComboBox y en la ventana de
Propiedades escogemos la propiedad model, hacemos clic en la parte derecha

Luego se escriben los nombres de los Item y se presiona Add. Despues de escribir los tems se
presiona OK
Escogemos el JComboBox y luego como vamos a escoger un elemento del Combo tenemos que
usar el evento ItemEvent Para esto Hacemos click derecho Events->Item->ItemStateChanged

public class FrmJComboBox extends javax.swing.JFrame {

public FrmJComboBox()
{
initComponents();
setSize(400,350);
setLocation(300,200);
setVisible(true);
}

private void cboArticuloItemStateChanged(java.awt.event.ItemEvent evt) {


int i=cboArticulo.getSelectedIndex();
switch(i)
{
case 0: txtPrecio.setText("50");break;
case 1: txtPrecio.setText("300");break;
case 2: txtPrecio.setText("600");break;
case 3: txtPrecio.setText("150");break;
}
}

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {


int cantidad;
double precio, total;
precio=Double.parseDouble(txtPrecio.getText());
cantidad=Integer.parseInt(txtCantidad.getText());
total=precio*cantidad;
txtTotal.setText(String.valueOf(total));

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {


txtPrecio.setText("");
txtCantidad.setText("");
txtTotal.setText("");
txtPrecio.requestFocus();
}

private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {


dispose();
}
9) El Control JTable
JTable es uno de los controles ms interesantes de swing. Se utiliza para mostrar conjuntos de
datos en una cuadricula bidimensional.

Un JTable puede obtener los datos a visualizar de una coleccin o array de Objetos, pero
tambin de cualquier otra fuente de datos cuyos criterios de obtencin de informacin estn
definidos en una clase que implemente la interfaz TableModel.

Constructores de JTable
JTable()
JTable(int numRows, int numColumns)
JTable(Object[][] rowData, Object[] columnNames)
JTable(TableModel dm)
JTable(TableModel dm, TableColumnModel cm)
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
JTable(Vector rowData, Vector columNames)

Metodos de JTable

Ejemplo:
Para este primer ejemplo utilizaremos el 3er. constructor de la lista anterior. El cual nos
permite construir una tabla a partir de dos parmetros; el primero de ellos: rowData es un
array bidimencional de objetos que representa el contenido de la tabla, y el segundo:
columnNames representa los nombres de cada columna, contenidos tambin en un array que
por lo general es un array de String's.
Nuestro primer ejemplo tendra las siguientes columnas:
String[] columnNames = {"Nombre", "Apellido", "Pasatiempo", "Aos de Practica",
"Soltero(a)"};
Y utilizaremos el siguiente array para su contenido:
Object[][] data = {
{"Mary", "Campione", "Esquiar", new Integer(5), new Boolean(false)},
{"Lhucas", "Huml", "Patinar", new Integer(3), new Boolean(true)},
{"Kathya", "Walrath", "Escalar", new Integer(2), new Boolean(false)},
{"Marcus", "Andrews", "Correr", new Integer(7), new Boolean(true)},
{"Angela", "Lalth", "Nadar", new Integer(4), new Boolean(false)}
};

El constructor, entonces queda asi:


JTable table = new JTable(data, columnNames);

En lugar de arrays pudimos haber utizado vectores y utilizado el ultimo de los constructores de
la lista mostrada anteriormente.
Aunque la maner ms sencilla de construir tablas es utilizando cualquiera de los siguientes
constructores:
JTable(Object[][] rowData, Object[] columnNames)
JTable(Vector rowData, Vector columnNames)

Su utilizacin presenta unas desventajas que debemos tener en cuenta:


- La primera, y ms notoria de ellas, es que para la construccion de la tabla se tienen
que tener de antemano los datos que queremos que contenga la tabla ya sea en un
array o en un vector, lo que le resta flexibilidad al llenado de la tabla; ya que quizs en
un momento dado, sera mucho ms prctico y rpido, colocar directamente los datos
en la tabla y no tener que colocarlos antes en un array o vector
- La segunda desventaja es que, estos constructores hacen automticamente que todas
las celdas sean editables.
- Y la tercera, y menos notoria a primera vista, es que todos los datos contenidos en la
tabla, son tratados como de un mismo tipo de datos. A pesar de que hemos declarado
columnas como Boolean o Integer, todas nuestas celdas muestran su contenido como
String's
Estas tres desventajas pueden ser eliminadas si agregamos un modelo de tabla a nuestra
aplicacion.

El Modelo de Tabla
Los modelos de tabla son objetos que implementan la interface TableModel; a travs de ellos
es posible personalizar mucho ms y mejor el comportamiento de los componentes JTable,
permitiendo utilizar al mximo sus potencialidades.
Todas las tablas cuentan con un modelo de tabla , aunque en el ejemplo anterior no se haya
especificado, existe uno por omisin
La clase AbstractTableModel es la que implementa directamente a la interface TableModel,
aunque es esta clase la que se recomienda extender para utilizarla como modelo de tabla,
existe un modelo de tabla predeterminado que facilita mucho el trabajo con tablas. Este
modelo predeterminado es la clase DefaultTableModel

Constructores de DefaultTableModel

DefaultTableModel()
DefaultTableModel(int numRows, int numColumns)
DefaultTableModel(Object[][] data, Object[] columnNames)
DefaultTableModel(Object[] columnNames, int numRows)
DefaultTableModel(Vector columnNames, int numRows)
DefaultTableModel(Vector data, Vector columNames)

Metodos de la clase DefaultTableModel

Resumen de los Mtodos

Mtodo Descripcin
void addColumnn(Object columnName) Aade una columna al modelo

addColumnn(Object columnName,
void Aade una columna al modelo
Object[] columnData)
addColumnn(Object columnName,
void Aade una columna al modelo
Vector columnData)
void addRow(Object[] rowData) Aade una fila al final de modelo
void addRow(Vector rowData) Aade una fila al final de modelo
public
Obtiene un Vector que contiene los
static convertToVector(Object[] anArray)
mismos objetos que el array
Vector

public Obtiene un Vector de vectores que


static convertToVector(Object[][] anArray) contiene los mismos valores que la
Vector matriz anArray

Devuelve el nmero de columnas


int getColumnCount()
en esta tabla de datos
String getColumnName(int column) Aade una fila al final de modelo
Devuelve el Vector de Vectores
Vector getDataVector que contiene los valores de datos
de la tabla
Devuelve el nmero de filas en
int getRowCount()
esta tabla de datos

Devuelve un valor de atributo para


Object getValueAt(int row, int column)
la celda en la posicin row, column
Inserta una fila en row en el
void insertRow(int row, Object[][] rowData)
modelo
Inserta una fila en row en el
void insertRow(int row, Vector rowData)
modelo
Devuelve true si la celda ubicada
boolean isCellEditable(int row, int column)
en row, column se puede editar

Muee una o ms filas comenzando


moveRow(int startIndex, endIndex, int
void desde starIndex hasta endIndex y
toIndex)
las coloca en toIndex
newDataAvailable(TableModelEvent
void Equivalente a fireTableChanged()
event)
Este mtodo permite asegurar que
void newRowsAdded(TableModelEvent event) las nuevas filas tienen el nmero
correcto de columnas
Elimina del modelo la fila ubicada
void removeRow(int row)
en row
void rowsRemoved(TableModelEvent event) Equivalente a fireTableChanged()

setColumnsIdentifiers(Object[] Reemplaza los identificadores de


void
newIdentifiers) columna del modelo
setColumnsIdentifiers(Vector Reemplaza los identificadores de
void
newIdentifiers) columna del modelo
Reemplaza el valor de la variable
setDataVector(Object[][] newData,
void de instancia dataVector por los
Object[] columnNames)
valores de la matriz newData

Reemplaza el valor de la variable


setDataVector(Vector newData, Vector
void de instancia dataVector por los
columnNames)
valores del Vector: newData

Asigna el nmero de filas del


void setNumRows(int newSize)
modelo.Obsoleto desde la v1.3
void setRowCount(int rowCount) Fija el nmero de filas del modelo
setValueAt(Object aValue, int row, int Asigna el valor del objeto para row
void
column) y column

Ejemplo: Se tiene la informacin de n productos en una Lista, mostrar todos los elementos en
un JTable.
Como se va a trabajar con un modelo para manipular los datos. Se hace lo siguiente:
1) Se coloca la tabla

Luego en la Ventana de Propiedades escogemos la propiedad model. Hacemos clic en la parte


derecha y sale la siguiente ventana.
En donde dice Set tablaProductos model property using. En el ComboBox cambiamos a
Custom Code

Luego colocamos el nombre del DefaultTableModel, en nuestro Ejemplo colocaremos modelo.


La Tabla se mostrara de la siguiente Manera

En el Formulario FrmMostrarProductos colocaremos el siguiente cdigo:


import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class FrmMostrarProductos extends javax.swing.JFrame {


private DefaultTableModel modelo= new DefaultTableModel();
public FrmMostrarProductos(Lista<Producto> LP)
{
initComponents();
setSize(400,300);
setLocation(300,200);
String titulos[]={"IdProducto","Descripcion","precio","stock"};
int i,n=LP.getN();
Object datos[][]=new Object[n][4];
Producto prod;
for(i=0;i<n;i++)
{
prod=LP.getProducto(i);
datos[i][0]=prod.getIdProducto();
datos[i][1]=prod.getNombre();
datos[i][2]=prod.getPrecio();
datos[i][3]=prod.getStock();
}
modelo.setDataVector(datos,titulos);
}
En la clase Main que es la clase Aplicacin que contiene el mtodo main colocaremos el
siguiente cdigo.
package proyectojtable;
public class Main {
public static void main(String[] args) {
Lista<Producto> LP =new Lista<Producto>();
Producto prod;
prod= new Producto("pr001","televisor LG",400,50);
LP.agregar(prod);
prod= new Producto("pr002","dvd",200,50);
LP.agregar(prod);
prod= new Producto("pr003","radio",30,100);
LP.agregar(prod);
prod= new Producto("pr004","refrigeradora",800,60);
LP.agregar(prod);
FrmMostrarProductos fp=new FrmMostrarProductos(LP);
fp.setVisible(true);
}
}

10) El Objeto JRadioButton y ButtonGroup


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.
Para cada grupo de botones de radio, se necesita crear un ejemplar de ButtonGroup y
aadirle cada uno de los botones de radio. El ButtonGroup tiene cuidado de desactivar la
seleccin anterior cuando el usuario selecciona otro botn del grupo.

Constructores de JRadioButton
JRadioButton(String)
JRadioButton(String, boolean)
JRadioButton(Icon)
JRadioButton(Icon, boolean)
JRadioButton(String, Icon)
JRadioButton(String, Icon, boolean)
JRadioButton()

Crea un ejemplar de JRadioButton. El argumento string especifica el texto, si existe, que debe
mostrar el botn de radio. Similarmente, el argumento, Icon especifica la imagen que debe
usar en vez la imagen por defecto de un botn de radio para el aspecto y comportamiento. Si
se especifica true en el argumento booleano, inicializa el botn de radio como seleccionado,
sujeto a la aprobacin del objeto ButtonGroup. Si el argumento booleano esta ausente o es
false, el botn de radio est inicialmente deseleccionado.
Metodos del JRaddioButton
setText(String): Coloca el Texto que se muestra con el JRadioButton
setIcon(Icon): Establece la Imagen que se muestra con el Radio Button;
boolean isSelected(): Devuelve verdadero si el JRadioButton esta seleccionado
setSelected(boolean b) : Establece el estado del JRadioButton

Eventos del JRadioButton


Al seleccionar un JRadioButton se produce un evento actionEvent de la interfaz ActionListener,
este se encuentra en el parmetro del metod actionPerformed.
Ejemplo:
Hacer un programa que tenga las opciones Rojo, verde, azul y al escoger una de ellas cambie el
color de fondo del Formulario.

Solucion
Colocamos los botones y para cambiar el Texto, hacemos clic en botn derecho y editamos el
texto, asi para los 3 botones

Con lo cual el formulario queda:


Ahora para que los JRadioButton queden agrupados,de la paleta de Controles jalamos un
objeto ButtonGroup al JFrame, este Objeto no se ve en el Formulario, pero en la parte
izquierda en el navigator aparece, en esta parte lo seleccionamos y le colocamos el nombre
grupoColores

Ahora agregamos cada botn al Grupo de botones

Seleccionamos el primer botn y en la ventana de Propiedades escogemos la propiedad


buttonGroup y selecconamos del Combo el objeto grupoColores.

Lo mismo hacemos para los dems botones. Una vez que todos los controles han sido
agregados al ButtonGroup. Programamos los eventos de cada botn.
Para esto seleccionamos cada botn, hacemos clic Derecho y Escogemos Events->Action-
>actionPerformed

El cdigo seria:
package proyectojradiobutton;
import java.awt.Color;
public class FrmColores extends javax.swing.JFrame {
public FrmColores() {
initComponents();
setSize(300,300);
setLocation(300,200);
setVisible(true);
}

private void rbRojoActionPerformed(java.awt.event.ActionEvent evt) {


getContentPane().setBackground(Color.red);
}

private void rbVerdeActionPerformed(java.awt.event.ActionEvent evt) {


getContentPane().setBackground(Color.green);
}

private void rbAzulActionPerformed(java.awt.event.ActionEvent evt) {


getContentPane().setBackground(Color.blue);
}

private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {


dispose();
}
}
11) El Objeto JCheckBox
Los objetos de esta clase representan marcadores que pueden activarse o desactivarse por
medio de una pulsacin. Si hay un grupo pueden estar ninguno seleccionado, alguno o todos.

Constructores
JCheckBox(String)
JCheckBox(String,boolean)
JCheckBox(Icon)
JCheckBox(Icon,boolean)
JCheckBox(String,Icon)
JCheckBox(String,Icon,boolean)
JCheckBox()
Crea un ejemplar de JCheckBox. El argumento string especfica el texto, si existe, que el
checkbox debera mostrar. De forma similar, el argumento Icon especfica la imagen que
debera utilizarse en vez de la imagen por defecto del aspecto y comportamiento.
Especificando el argumento booleano como true se inicializa el checkbox como seleccionado.
Si el argumento booleano no existe o es false, el checkbox estar inicialmente desactivado.
Metodos del JCheckBox
setText(String): Coloca el Texto que se muestra con el JCheckBox
setIcon(Icon): Establece la Imagen que se muestra con el JCheckBox
boolean isSelected(): Devuelve verdadero si el JCheckBox esta seleccionado
Eventos del JCheckBox
Si deseamos hacer algo al hacer click en el JCheckBox debemos programar el evento ItemEvent
que se encuentra en el mtodo itemStateChanged de la interfaz ItemListener.
Ejemplo:
Utilizamos dos objetos de la clase JCheckBox para cambiar el estilo de la fuente del texto
desplegado en un objeto JTextField. Uno aplica un estilo de negritas al seleccionarlo y el
otro un estilo de cursivas. Ambos pueden aplicarse a la vez. De inicio ninguno esta
seleccionado.
Colocamos los CheckBox y si queremos hacer algo al seleccionar el CheckBox debemos
programar el Evento ItemEvent. Para esto escogemos el CheckBox, hacemos clic derecho y
luego Events->Items->itemStateChanged

Luego colocamos el cdigo y quedara asi:

public class FrmEjemploCheckBox extends javax.swing.JFrame {

int valNegrita = Font.PLAIN;


int valCursiva = Font.PLAIN;

public FrmEjemploCheckBox() {
initComponents();
setSize(300,300);
setLocation(300,200);
setVisible(true);

private void chkNegritaItemStateChanged(java.awt.event.ItemEvent evt) {


if ( chkNegrita.isSelected())
valNegrita = Font.BOLD;
else
valNegrita = Font.PLAIN;
txtTexto.setFont(new Font( "TimesRoman",valNegrita + valCursiva, 14 ) );
}
private void chkCursivaItemStateChanged(java.awt.event.ItemEvent evt) {
if ( chkCursiva.isSelected())
valCursiva = Font.ITALIC;
else
valCursiva = Font.PLAIN;
txtTexto.setFont(new Font( "TimesRoman", valNegrita + valCursiva, 14 ) );
}

private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {


dispose();
}
}
12) Menus
Ahora veremos cmo utilizar el JMenu y todas las dems clases que nos permiten mostrar
mens. Para Mostrar mens se necesitan varias clases pero no es complicado una vez que
entendemos cmo manejarlos.
Los mens nos sirven para mostrar una gran cantidad de opciones sin saturar al usuario
adems de que nos permiten crear una interfaz consistente.
Cmo crear un Menu?
Existen tres clases importantsimas al utilizar menus en Java:
1) La primera es JMenuBar, que representa la barra en la que voy a guardar mis menus,
tecnicamente nada ms es una barra donde podemos poner menus.
2) Estos menus se representan mediante JMenu que son lo que nosotros normalmente
llamamos men por ejemplo el men "Archivo", "Edicin", "Formato", etc. dentro de
estos menus tenemos diferentes elementos.
3) Los elementos de un men se reperesentan mediante la clase JMenuItem que son las
opciones que hay dentro de cada men, por ejemplo, en el men "Archivo" est la
opcin de "Nuevo", "Guardar", "Abrir", etc.
Todo esto es muy importante tenerlo en mente ya que cuando creamos nuestros menus
tenemos que crear una barra de menu (con JMenuBar) y despus agregarle varios menus (con
JMenu) y a cada uno de los mens ponerle opciones y botones (con JMenuItem).

Ejemplo
En la paleta de Controles Hacemos clic en + donde dice Swing Menus
Aparecen todos los objetos para crear un Menu

Colocamos en el Formulario un Menu Bar


Aparece dentro del JMenuBar dos Opciones File, Edit (JMenus). En la Ventana Navigator de la
parte izquierda vemos los dos JMenus que pertenecen a JMenu Item. Podemos cambiar los
textos y nombres de los JMenus como los dems controles. Cambiemos los textos por Areas y
Volumenes y luego agreguemos los JMenuItem a los respectivos JMenus

Para agregar un JMenuItem a un JMenu. Arrastramos un Menu Item al JMenu.


En el ejemplo arrastramos 3 JMenuItems al men Areas.
Si queremos colocarle un evento al JMenuItem, Seleccionamos el JMenuItem y luego Events-
>Action->actionPerformed

Y se coloca el cdigo. Se repite lo mismo para las dems opciones

Anda mungkin juga menyukai