Está en la página 1de 64

UNIVERSIDAD HISPANOAMERICANA-SEDE GRANADA

Programación en base de datos

Integrantes: Karla de los ángeles Hernández castillo

Carrera: ingeniería en sistemas

Profesor: Ing. Armando joya

Fecha: sábado 08 de agosto del 2020.


¿Qué es un formulario?
Un Formulario es un documento utilizado para la recolección de datos de manera
estructurada. Se designa con el término de Formulario a aquella plantilla que
contiene espacios vacíos, los cuales están destinados para ser rellenados por
algún individuo con un propósito específico.
Los formularios en Java contienen un código asociado que se genera de forma
automática cada vez que se añade un botón para crear una acción o una etiqueta,
de la misma forma este formulario también puede generar un código que permite
cambiar el texto del botón que se va a introducir para así reconocer que tipo de
función realizará ese botón, también cambia el texto de determinada etiqueta. En
Java el concepto de formulario no se limita a los FORM que se encuentran el
HTML y del mundo web en general, desde innumerables años atrás se han
necesitado formularios para la recolección de información relevante sobre una
persona o asunto, a medida que ha pasado el tiempo este concepto se ha ido
adaptando a las diferentes ramas donde el ser humano desempeña funciones y en
especial la programación de computadoras y el internet.
Recomendaciones para crear un formulario
Para crear buenos formularios con el lenguaje deben dar una sensación de orden,
con claridad en la información evitando que se vuelvan cansados e interminables a
menos de que sea necesario, por ejemplo exceso de texto, iconos o cuadros. El
texto mientras más directo, mucho mejor, los textos deben ser claros y resumidos.
Es importante eliminar grafismos innecesarios, sustituir líneas innecesarias. Los
formularios son recolectores de información con entrada de datos necesarios y así
minimizar la cantidad de campos requeridos, de la misma forma minimizar los
campos opcionales. La información debe ser relevante. La redacción de los textos
debe ser corta donde se eliminen palabras innecesarias, para aprender a crear
formularios de manera práctica y sencilla, te recomendamos este curso java.
Tipos de formularios
Formularios en Java. Componentes
Continúo con ejemplos de componentes Swing para formularios. Para realizar
estos ejemplos, he implementado un sencillo formulario que nos permita
"gestionar" nuestros hobbies, por ejemplo, que nos permita ver el listado de libros
que tenemos, añadir alguno nuevo, etc.
Los nuevos componentes utilizados han sido:
 JTable. A su vez utiliza una clase que implementa TableModel.
 JTabbedPane
 JOptionPane
 JCheckBox
 JComboBox<E>
 JTextArea
 JRadioButton y ButtonGroup
Además, he utilizado algunos de los layouts vistos anteriormente, lo que le da
mucho mejor aspecto a los fomrularios, sin necesidad de estar cuadrando
coordenadas.

FORMULARIO INICIAL
Es el que se muestra al abrir la aplicación. Consiste en un panel con varias
pestañas para cada uno de los hobbies que queramos gestionar. En la primera, se
muestra un listado de libros.
Si hacemos clic en "Salir", se muestra un cuadro de diálogo creado con la clase
JOptionPane, tal y como se puede ver en el código.

@SuppressWarnings("serial")
public class ComponentesFormII extends JFrame {

JButton salirButton, nuevoDiscoButton, nuevoLibroButton;


JTable discosTable, librosTable;
LibrosTableModel librosTableModel;

public ComponentesFormII() {
initForm();
initComponents();
setVisible(true);
}

private void initForm() {


setTitle("Mis hobbies");
setSize(640, 480);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { onWindowClosing(e); }
});
setLocationRelativeTo(null);
}

private void initComponents() {


salirButton = new JButton("Salir");
salirButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { onSalirButtonActionPerformed(e); }
});
salirButton.setMnemonic(KeyEvent.VK_S);
JPanel botonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
botonPanel.add(salirButton);

JTabbedPane hobbiesPanel = new JTabbedPane();


hobbiesPanel.add("Libros", librosPanel());
//Paneles vacíos
hobbiesPanel.add("Música", new JPanel());
hobbiesPanel.add("Viajes", new JPanel());

getContentPane().add(hobbiesPanel, BorderLayout.CENTER);
getContentPane().add(botonPanel, BorderLayout.SOUTH);
}

protected void onWindowClosing(WindowEvent e) {


salir();
}

protected void onSalirButtonActionPerformed(ActionEvent e) {


salir();
}

private void salir() {


BaseDatos.desconectar();
//La clase JOptionPane nos permite mostrar diferentes cuadros de diálogo
//Estableciendo las opciones en el constructor
int respuesta = JOptionPane.showConfirmDialog(this, "¿Está seguro de que
quiere salir?", "Salir", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (respuesta == JOptionPane.YES_OPTION) {
dispose();
}
}

private JPanel librosPanel() {


nuevoLibroButton = new JButton("Añadir libro");
nuevoLibroButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onNuevoLibroButtonActionPerformed(e); }
});
nuevoLibroButton.setMnemonic(KeyEvent.VK_L);

JPanel botonPanel = new JPanel();


botonPanel.add(nuevoLibroButton);

librosTableModel = new LibrosTableModel();


librosTable = new JTable(librosTableModel);
JPanel tablaPanel = new JPanel(new BorderLayout());
tablaPanel.setBorder(BorderFactory.createTitledBorder(" Libros: "));
//Debemos poner la tabla dentro de un panel de tipo JScrollPane
//Para que se muestre correctamente
tablaPanel.add(new JScrollPane(librosTable), BorderLayout.CENTER);
tablaPanel.add(botonPanel, BorderLayout.SOUTH);

return tablaPanel;
}

protected void onNuevoLibroButtonActionPerformed(ActionEvent e) {


new LibrosForm();
librosTableModel.refrescar();
}

LibrosTableModel

public class LibrosTableModel implements TableModel {

Hobbies hobbies;
List<Libro> libros;
private TableModelListener listener;

public LibrosTableModel() {
hobbies = new Hobbies();
libros = hobbies.recuperarLibros();
}

@Override
public void addTableModelListener(TableModelListener arg0) {
listener = arg0;
}

@Override
public Class<?> getColumnClass(int arg0) {
switch (arg0) {
case 0: return Long.class;
case 1: return String.class;
case 2: return Boolean.class;
case 3: return Boolean.class;
case 4: return String.class;
}
return null;
}
@Override
public int getColumnCount() {
return 5;
}

@Override
public String getColumnName(int arg0) {
switch (arg0) {
case 0: return "ISBN";
case 1: return "Título";
case 2: return "Leído";
case 3: return "Lo tengo";
case 4: return "Autor";
}
return null;
}

@Override
public int getRowCount() {
return libros.size();
}

@Override
public Object getValueAt(int arg0, int arg1) {
Libro libro = libros.get(arg0);
switch (arg1) {
case 0: return libro.getIsbn();
case 1: return libro.getTitulo();
case 2: return libro.getLeido();
case 3: return libro.getTengo();
case 4: return libro.getAutor().getNombre();
}
return null;
}

@Override
public boolean isCellEditable(int arg0, int arg1) {
return false;
}

@Override
public void removeTableModelListener(TableModelListener arg0) {
// TODO Auto-generated method stub

}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub

//Método que nos permite actualizar el listado de libros cuando hemos añadido
alguno
public void refrescar() {
libros = hobbies.recuperarLibros();
listener.tableChanged(new TableModelEvent(this));
}

JOPTIONPANE

CUADRO DE DIÁLOGO "CREAR LIBRO"


Si en el formulario anterior hacemos clic sobre "Añadir libro", se abre un cuadro de
diálogo en el que podremos indicar los diferentes datos del ejemplar que
queramos. Además, si en el JComboBox, no está el autor que queremos,
podemos hacer clic en "Nuevo autor" para añadirlo.

@SuppressWarnings("serial")
public class LibrosForm extends JDialog {

private JButton guardarButton, cancelarButton, nuevoAutorButton;


private JLabel isbnLabel, tituloLabel, autorLabel, sinopsisLabel, generoLabel;
private JTextField isbnText, tituloText;
private JCheckBox leidoCheck, tengoCheck;
private JComboBox<String> autores;
private JTextArea sinopsisTextArea;
private JRadioButton terrorRadio, cienciaFiccionRadio, romanceRadio,
fantasiaRadio;
private ButtonGroup generoGroup;

private Hobbies hobbies;


private List<Autor> listado;

public LibrosForm() {
hobbies = new Hobbies();
listado = hobbies.recuperarAutores();
initForm();
initComponents();
setVisible(true);
}

private void initForm() {


setTitle("Crear libro");
setSize(480, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setResizable(false);
setModal(true);
}

private void initComponents() {


guardarButton = new JButton("Guardar");
guardarButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onGuardarButtonActionPerformed(e); }
});
cancelarButton = new JButton("Cancelar");
cancelarButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onCancelarButtonActionPerformed(e); }
});
nuevoAutorButton = new JButton("Nuevo autor");
nuevoAutorButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onNuevoAutorButtonActionPerformed(e); }
});
isbnLabel = new JLabel("ISBN:");
tituloLabel = new JLabel("Título:");
autorLabel = new JLabel("Autor:");
sinopsisLabel = new JLabel("Sinopsis:");
sinopsisLabel.setVerticalAlignment(JLabel.TOP);
generoLabel = new JLabel("Género:");
generoLabel.setVerticalAlignment(JLabel.TOP);
isbnText = new JTextField();
tituloText = new JTextField();
sinopsisTextArea = new JTextArea();
//Debemos indicar el número de filas que queremos que tenga el JTextArea
sinopsisTextArea.setRows(3);
leidoCheck = new JCheckBox("Leído");
tengoCheck = new JCheckBox("Lo tengo");
terrorRadio = new JRadioButton("Terror");
//El método setActionCommand(), nos permite saber a través del JButtonGroup,
cuál es el elemento seleccionado
terrorRadio.setActionCommand("Terror");
cienciaFiccionRadio = new JRadioButton("Ciencia ficción");
cienciaFiccionRadio.setActionCommand("Ciencia ficción");
romanceRadio = new JRadioButton("Romance");
romanceRadio.setActionCommand("Romance");
fantasiaRadio = new JRadioButton("Fantasía");
fantasiaRadio.setActionCommand("Fantasía");
//El ButtonGroup realiza una agrupación lógica de los JRadioButton, que permite
saber cuál es el seleccionado
generoGroup = new ButtonGroup();
generoGroup.add(terrorRadio);
generoGroup.add(cienciaFiccionRadio);
generoGroup.add(romanceRadio);
generoGroup.add(fantasiaRadio);
autores = new JComboBox<String>();

for (Autor autor : listado) {


autores.addItem(autor.getNombre());
}

JPanel botonesPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));


botonesPanel.add(guardarButton);
botonesPanel.add(cancelarButton);

//Ponemos el JTextArea dentro de un JScrollPane, para que podamos ver todas


las filas si se escribe más de las indicadas
JScrollPane sinopsisPanel = new JScrollPane(sinopsisTextArea);

JPanel checkPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));


checkPanel.add(leidoCheck);
checkPanel.add(tengoCheck);

JPanel generoPanel = new JPanel(new GridLayout(2, 2));


generoPanel.add(terrorRadio);
generoPanel.add(cienciaFiccionRadio);
generoPanel.add(romanceRadio);
generoPanel.add(fantasiaRadio);

JPanel datosPanel = new JPanel(new GridBagLayout());


datosPanel.add(isbnLabel, new GridBagConstraints(0, 0, 1, 1, 0.25, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(isbnText, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(tituloLabel, new GridBagConstraints(0, 1, 1, 1, 0.25, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(tituloText, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(autorLabel, new GridBagConstraints(0, 2, 1, 1, 0.25, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(autores, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(nuevoAutorButton, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(sinopsisLabel, new GridBagConstraints(0, 4, 1, 1, 0.25, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(sinopsisPanel, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(generoLabel, new GridBagConstraints(0, 5, 1, 1, 0.25, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(generoPanel, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(checkPanel, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));

getContentPane().setLayout(new BorderLayout());
getContentPane().add(datosPanel, BorderLayout.NORTH);
getContentPane().add(botonesPanel, BorderLayout.SOUTH);
}

protected void onGuardarButtonActionPerformed(ActionEvent e) {


Libro libro = new Libro();
libro.setIsbn(Long.parseLong(isbnText.getText()));
libro.setTitulo(tituloText.getText());
libro.setLeido(leidoCheck.isSelected());
libro.setTengo(tengoCheck.isSelected());
libro.setAutor(listado.get(autores.getSelectedIndex()));
libro.setGenero(generoGroup.getSelection().getActionCommand());
libro.setSinopsis(sinopsisTextArea.getText());

hobbies.insertarLibro(libro);
dispose();
}

protected void onCancelarButtonActionPerformed(ActionEvent e) {


dispose();
}

protected void onNuevoAutorButtonActionPerformed(ActionEvent e) {


new AutorForm();

//Para actualizar el listado de autores, eliminamos primero todos los elementos


autores.removeAllItems();
//Y los volvemos a añadir (así estará el que se acaba de añadir)
listado = hobbies.recuperarAutores();
for (Autor autor : listado) {
autores.addItem(autor.getNombre());
}
//Para que aparezca seleccionado el autor que acabamos de añadir
autores.setSelectedIndex(listado.size()-1);
}
}
CUADRO DE DIÁLOGO "NUEVO AUTOR"

@SuppressWarnings("serial")
public class AutorForm extends JDialog {

private JButton guardarButton, cancelarButton;


private JLabel nombreLabel;
private JTextField nombreText;

public AutorForm() {
initForm();
initComponents();
setVisible(true);
}

private void initForm() {


setTitle("Nuevo autor");
setSize(350, 100);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setModal(true);
}
private void initComponents() {
guardarButton = new JButton("Guardar");
guardarButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onGuardarButtonActionPerformed(e); }
});
cancelarButton = new JButton("Cancelar");
cancelarButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{ onCancelarButtonActionPerformed(e); }
});
nombreLabel = new JLabel("Nombre:");
nombreText = new JTextField();

JPanel botonesPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));


botonesPanel.add(guardarButton);
botonesPanel.add(cancelarButton);

JPanel datosPanel = new JPanel(new GridBagLayout());


datosPanel.add(nombreLabel, new GridBagConstraints(0, 0, 1, 1, 0.1, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));
datosPanel.add(nombreText, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0,
0));

getContentPane().setLayout(new BorderLayout());
getContentPane().add(datosPanel, BorderLayout.NORTH);
getContentPane().add(botonesPanel, BorderLayout.SOUTH);
}

protected void onGuardarButtonActionPerformed(ActionEvent e) {


Hobbies hobbies = new Hobbies();
Autor autor = new Autor();
autor.setNombre(nombreText.getText());

hobbies.insertarAutor(autor);
dispose();
}

protected void onCancelarButtonActionPerformed(ActionEvent e) {


dispose();
}
}
Objetos que debe tener un formulario
1. Objeto form

Este objeto es el contenedor de todos los elementos del formulario. Como ya


vimos al tratar el objeto document, los formularios se agrupan en un array dentro
de document. Cada elemento de este array es un objeto de tipo form.

1.1 Propiedades

1. action: Es una cadena que contiene la URL del parámetro ACTION del
form, es decir, la dirección en la que los datos del formulario serán procesados.

2. elements: Es un array que contiene todos los elementos del formulario, en


el mismo orden en el que se definen en el documento HTML. Por ejemplo, si
en el formulario hemos puesto, en este orden, una caja de texto, un checkbox y
una lista de selección, la caja de texto será elements[0], el checkbox será
elements[1] y la lista de selección será elements[2].

3. encoding: Es una cadena que tiene la codificación mime especificada en el


parámetro ENCTYPE del form.

4. method: Es una cadena que tiene el nombre del método con el que se va a
recibir/procesar la información del formulario (GET/POST).

Métodos

1. reset(): Resetea el formulario: tiene el mismo efecto que si pulsáramos un


botón de tipo RESET dispuesto en el form.

2. submit(): Envía el formulario: tiene el mismo efecto que si pulsáramos un


botón de tipo SUBMIT dispuesto en el form. [1].

A continuación se verán los objetos que hacen parte del formulario:

Objetos text, textarea y password

Estos objetos representan los campos de texto dentro de un formulario. El objeto


password es exactamente igual que el text salvo en que no muestra los caracteres
introducidos por el usuario, poniendo asteriscos (*) en su lugar.
Propiedades

1. dafaultValue: Es una cadena que contiene el valor por defecto que se le ha


dado a uno de estos objetos por defecto.

2. name: Es una cadena que contiene el valor del parámetro NAME.

3. value: Es una cadena que contiene el valor del parámetro VALUE.

4. maxlength: Número máximo de caracteres que puede contener el campo


de texto.

Métodos

1. blur(): Pierde el foco del ratón sobre el objeto especificado.

2. focus(): Obtiene el foco del ratón sobre el objeto especificado.

3. select(): Selecciona el texto dentro del objeto dado. [2].

<html>

<head>
<title> Ejemplo password</title>
</head>

<body>
<script language= "javascript" type= "text/javascript">

function Mostrar()
{
alert('Tu nombre es ' + formulario.nombre.value);
alert('Tu password es ' + formulario.pass.value);
}

</script>

<form name="formulario" id="formulario">

Nombre:<br> <input type="text" name="nombre" value=""


maxlength="15"><br><br>

Password:<br><input type="password" name="pass" maxlength="10"><br>


</form>

<a href="javascript:Mostrar();">Mostrar datos</a><br>

</body>
</html>

Tabla 1. Ejemplo Password

Objeto button

Hay tres tipos de botones: uno genérico, 'button', que no tiene acción asignada, y
dos específicos, 'submit' y 'reset'. Estos dos últimos tienen una acción asignada al
ser pulsados: el primero envía el formulario y el segundo limpia los valores del
formulario.

Propiedades

1. name: Es una cadena que contiene el valor del parámetro NAME.

2. value: Es una cadena que contiene el valor del parámetro VALUE.

3.2 Métodos
Ejemplo:

<html>

<head>
<title>Ejemplo button</title>
</head>

<body>
<script language= "javascript" type= "text/javascript">

function Mostrar(boton)
{
alert('Ha hecho clic sobre el botón: ' + boton.name+', de valor: '+boton.value);
return true;
}
</script>

<form name="formulario">

Un botón: <input type="button" name="Boton1" value="El botón 1"


OnClick="Mostrar(this);"><br><br>

Un botón: <input type="button" name="Boton2" value="El botón 2"


OnClick="Mostrar(this);"><br><br>

Un botón: <input type="button" name="Boton3" value="El botón 3"


OnClick="Mostrar(this);"><br>

</form>

</body>
</html>

Tabla 2. Ejemplo button

4. Objeto checkbox

Las "checkboxes" permiten seleccionar varias opciones marcando el cuadrito que


aparece a su izquierda. El cuadrito pulsado equivale a un "sí" y sin pulsar a
un "no" , o lo que es equivalente a "true" o "false".

Propiedades

1. hecked: Valor booleano que nos dice si el checkbox está pulsado o no.

2. defaultChecked: Valor booleano que nos dice si el checkbox debe estar


seleccionado por defecto o no.

3. name: Es una cadena que contiene el valor del parámetro NAME.

4. value: Es una cadena que contiene el valor del parámetro VALUE.

4.2 Métodos
Ejemplo:
<html>

<head>
<title>Ejemplo checkbox</title>
</head>

<body>
<script language= "javascript" type= "text/javascript">

function Mostrar()
{
msg="Opcion 1:"+formulario.check1.checked+"\n"
msg+="Opcion 2:"+formulario.check2.checked+"\n"
msg+="Opcion 3:"+formulario.check3.checked+"\n"
alert(msg);
}

</script>

<form name="formulario" id="formulario">

<input type="checkbox" name="check1" checked> Opción 1<br>


<input type="checkbox" name="check2"> Opción 2 <br>
<input type="checkbox" name="check3" checked> Opción 3<br>

</form>

<a href="javascript:Mostrar()">Ver valores</a>

</body>
</html>

Tabla 3. Ejemplo checkbox

Ver ejemplo

Objeto radio

A diferencia de los checkbox, que permiten elegir varias posibilidades entre las
dadas, los objetos radio sólo permiten elegir una de entre todas las que hay. Están
pensados para posibilidades mutuamente excluyentes (no se puede ser a la vez
mayor de 18 años y menor de 18 años, no se puede estar a la vez soltero y
casado, etc).

Propiedades

1. checked: Valor booleano que nos dice si el radio está seleccionado o no.

2. defaultChecked: Valor booleano que nos dice si el radio debe estar


seleccionado por defecto o no.

3. length: Valor numérico que nos dice el número de opciones dentro de un


grupo de elementos radio.

4. name: Es una cadena que contiene el valor del parámetro NAME.

5. value: Es una cadena que contiene el valor del parámetro VALUE.

Nota: Para agrupar elementos de tipo radio, todos ellos deben tener el mismo


valor en NAME.

Métodos
Ejemplo:

<html>

<head>
<title>Ejemplo radio</title>
</head>

<body>
<script language= "javascript" type= "text/javascript">

function Mostrar()
{
msg="Elementos:"+formulario.edad.length+"\n";
msg+="Menor de 18 años: "+formulario.edad[0].checked+"\n";
msg+="Entre 18 y 60 años: "+formulario.edad[1].checked+"\n";
msg+="Mayor de 60 años: "+formulario.edad[2].checked+"\n";
alert(msg);
}

</script>

<form name="formulario" id="formulario">


Edad:<br><br>

<input type="radio" name="edad" value="<18"> Menor de 18 años.<br>

<input type="radio" name="edad" value=">18 y <60" checked> Entre 18 y 60


años.<br>

<input type="radio" name="edad" value=">60"> Mayor de 60 años.<br>

</form>

<a href="javascript:Mostrar()">Ver valores</a>

</body>
</html>

6. Objeto select

Este objeto representa una lista de opciones dentro de un formulario. Puede


tratarse de una lista desplegable de la que se puede escoger alguna (o algunas)
de sus opciones.

Propiedades

1. length: Valor numérico que nos indica cuántas opciones tiene la lista.

2. name: Es una cadena que contiene el valor del parámetro NAME.

3. options: Se trata de un array que contiene cada una de las opciones de la


lista. Este array tiene, a su vez, las siguientes propiedades:

1. defaultSelected: Valor booleano que nos indica si la opción está


seleccionada por defecto.

2. index: Valor numérico que nos da la posición de la opción dentro de


la lista.

3. length: Valor numérico que nos dice cuántas opciones tiene la lista.

4. options: Cadena con todo el código HTML de la lista.

5. selected: Valor booleano que nos dice si la opción está actualmente


seleccionada o no.
6. text: Cadena con el texto mostrado en la lista de una opción
concreta.

7. value: Es una cadena que contiene el valor del parámetro VALUE de


la opción concreta de la lista.

4. selectedIndex: Valor numérico que nos dice cuál de todas las opciones


disponibles está actualmente seleccionada.

Ejemplo:

<html>

<head>
<title>Ejemplo select</title>
</head>

<body>
<script language= "javascript" type= "text/javascript">

function Mostrar(boton)
{
msg="Elementos:"+formulario.edad.length+"\n";
msg+="Edad: "+formulario.edad.options
[formulario.edad.selectedIndex].value+"\n";
alert(msg);
}

</script>

<form name="formulario" id="formulario" >


Edad:<br><br>
<select name="edad">
<option value="<18" selected>Menor de 18 años</option>
<option value=">18 y <60">Entre 18 y 60 años</option>
<option value=">60">Mayor de 60 años</option>
</select>
</form>

<br>
<a href="javascript:Mostrar()">Ver valores</a>

</body>
</html>
Tabla 5. Ejemplo select

Ver ejemplo

7. Objeto hidden

Gracias a este objeto se puede almacenar información extra en el formulario de


forma completamente invisible para el usuario, pues no se verá en ningún
momento que se tienen estos campos en el documento.
Es parecido a un campo de texto (objeto text) salvo que no tiene valor por defecto
(no tiene sentido pues el usuario no va a modificarlo), y que no se puede editar.
7.1 Propiedades

1. name: Es una cadena que contiene el valor del parámetro NAME.

value: Es una cadena que contiene el valor del parámetro VALUE.


Etiquetas

Cuadros de texto

Son ventanas que por lo general se utilizan para desplegar mensajes importantes
para el usuario de una aplicación
Java 2 incluye la clase JOptionPane que permite desplegar fácilmente un cuadro
de diálogo que contiene información

package bienvgrafica;

import javax.swing.JOptionPane;  // importa la clase JOptionPane

/**

 * @author Jorge Armando

 */

public class Main {

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        JOptionPane.showMessageDialog( null, "Bienvenido\na
la\nProgramacion\nen Java!" );

      System.exit( 0 );  // termina el programa

    }

}
Una de las grandes fortalezas de Java es su rica colección de clases predefinidas,
las cuales pueden reutilizar los programadores.

Las diversa clases predefinidas se agrupan en categorías de clases relacionadas


llamadas paquetes

A los paquetes se les conoce de manera colectiva como biblioteca de clases en


Java o como la interfaz de programación de aplicaciones de Java (API)

La clase cestá definida para nosotros en un paquete llamado javax.swing

import javax.swing.JOptionPane;

Es una instrucción para importar. El compilador utiliza instrucciones import para


identificar y cargar las clases requeridas para compilar un programa en Java

Las instrucciones import ayudan al compilador a localizar las clases que intenta


utilizar.

Cada porción del nombre del paquete es un directorio o carpeta en el disco.

Todos los paquetes en la API de Java se almacenan en el directorio java o javax


que contiene muchos subdirectorios como swing

swing

Esté paquete contiene muchas clases que ayudan a los programadores en Java a
definir las interfaces gráficas de usuario (GUI) para sus aplicaciones.

Los componentes GUI facilitan la entrada  de datos por parte del usuario de su
programa y a dar formato o presentar la salida de datos para el usuario del
programa

Utilizamos el método estático exit  de la clase System para terminar con la


aplicación.

Está línea es necesaria en cualquier aplicación que despliegue una interfaz gráfica
de usuario, para terminar con la aplicación.

Recuerda que los identificadores que empiezan con mayúscula por lo general
representan nombres de la clases.

El argumento 0 indica que las aplicaciones terminaron exitosamente.

La clase System es parte del paquete java.lang


Observa que la está clase no se importo, mediante la instrucción import al principio
del programa, esto es por que, el paquete java.lang se importa automáticamente
en cada programa de Java

Cuadros Combinados con Java y NetBeans


A continuación presento un ejemplo de uso práctico de cuadros
combinados en NetBeans.

Realiza los siguientes pasos:

1.- Crea un nuevo proyecto.

2.- Dentro de Source Package crea un Java Package y llamalo paqueteInicial.

3.- Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial.


4.- Dentro de VentanaInicial sigue realizando los siguientes pasos.

5.- Agrega una etiqueta con borde llamada etiPuntoCardinal.

6.- Añade un cuadro combinado (también conocido como combo). Los cuadros


combinados son objetos de la clase JComboBox. Básicamente un combo es una
lista desplegable.

7.- Cambia el nombre al JComboBox por cboPuntosCardinales. El diseño de tu


ventana debe ser el siguiente:
8.- Para cambiar los elementos de cboPuntosCardinales hay que recurrir a su
propiedad model; selecciona el combo en la ventana, luego haz click en el botón
con tres puntos que está a la derecha de su propiedad model, se mostrará lo
siguiente:

9.- Borra los elementos actuales que contiene el combo y escribe los siguientes:
        Este
              Oeste
              Norte
              Sur
10.- Acepta los cambios y ejecuta el programa para que se pueda ver el contenido
del combo.

11.- Al hacer clik en el algún elemento del combo debería mostrarse en la etiqueta
el punto cardinal elegido; para lograr esto tenemos que escribir el siguiente código
en el evento ActionPerformed del cboPuntosCardinales:

    String mensaje = "Punto Cardinal elegido: ";


        
    mensaje = mensaje + cboPuntosCardinales.getSelectedItem().toString();

    etiPuntoCardinal.setText(mensaje);
12.- En la primera línea del código anterior se declara la variable mensaje de tipo
cadena, en esta misma línea se inicializa a dicha variable con el texto: "Punto
Cardinal elegido: ".

13.- En la segunda línea de código se agrega a la variable mensaje el texto del


item seleccionado en el combo a través de su método getSelectedItem y
convirtiéndo en texto con toString.

14.- Y en la tercera línea de código se muestra el contenido de la


variable mensaje en la etiqueta etiPuntoCardinal haciendo uso del método setText.
15.- Prueba el funcionamiento del programa ejecutándolo, si seleccionas el
elemento Norte se mostrará la siguiente ventana:

16.- A los combos o cuadros combinados se les puede utilizar además como
cuadros de texto, permitiendo que se pueda escribir texto en ellos, para esto
tenemos que activar su propiedad editable.
17.- Ejecuta el programa y prueba a escribir texto en el cuadro combinado, al
pulsar enter se mostrará en la etiqueta el texto escrito en el combo.
casillas de verificacion y Botones de radio
En este tema vamos a tratar los controles referentes a las casillas de verificacion y
los botones de radio. En primer lugar, veremos las casillas de verificacion.
 
Control JCheckBox
 
Estas casillas son las tipicas donde podemos seleccionar varias opciones.
Nosotros vamos a hacer un ejercicio sencillo en el cual simplemente tendremos
dos opciones mediante dos casillas de verificacion, estas casillas seran las
siguentes:
 
[] Azul
[] Verde
 
La casilla que marcaremos saldra reflejada en un JTextField. Mediante el metodo
"isSelected()" le indicaremos el estado en que se encuentra la casilla de
verificacion.
 
import javax.swing.*;
import java.awt.event.*;
 
public class MiVentana extends JFrame implements ActionListener{
 
    JCheckBox cbSeleccionAzul, cbSeleccionVerde;
    JButton btnConfirmar;
    JTextField cmpSeleccion;
 
    public MiVentana(){
        this("Casillas de verificacion",10,10,250,200);
  }
 
    public MiVentana(String titulo, int x, int y, int w, int h){
        super(titulo);
        this.getContentPane().setLayout(null);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(x,y,w,h);
        this.setVisible(true);
 
        cbSeleccionAzul = new JCheckBox("Azul");
            cbSeleccionAzul.setBounds(10,20,100,20);
            this.getContentPane().add(cbSeleccionAzul);
 
        cbSeleccionVerde = new JCheckBox("Verde");
            cbSeleccionVerde.setBounds(10,50,100,20);
            this.getContentPane().add(cbSeleccionVerde);
 
        cmpSeleccion = new JTextField();
            cmpSeleccion.setBounds(10,80,150,20);
            this.getContentPane().add(cmpSeleccion);
 
        btnConfirmar = new JButton("Confirmar");
            btnConfirmar.setBounds(120,130,100,20);
            this.getContentPane().add(btnConfirmar);
 
            btnConfirmar.addActionListener(this);
 
        paintComponents(getGraphics());
  }
 
    public void actionPerformed(ActionEvent event){
        if(event.getSource()==btnConfirmar){
            if(cbSeleccionAzul.isSelected()){
                cmpSeleccion.setText("Seleccionado Azul");
      }
            if(cbSeleccionVerde.isSelected()){
                cmpSeleccion.setText("Seleccionado Verde");
      }
    }
  }
 
    public static void main(String[]args){
 
        MiVentana mv = new MiVentana();
 
  }
}
 
Tambien podemos decirle que una de las casillas quede seleccionada
predeterminada con el metodo "setSelected()". Por ejemplo, si queremos que la
casilla de verificacion verde quede seleccionada cuando ejecutamos la aplicacion,
dentro del constructor quedara de esta forma:
 
cbSeleccionVerde.setSelected();
A continuacion, veremos los botones de radio, que son un tanto parecido a las
casillas de verificacion, pero en este caso los botones de radio los agruparemos
en un grupo con la clase ButtonGroup. Quiere decir esto, que cuando un boton
este seleccionado, el resto se deseleccionara, para asi obtener un solo boton
seleccionado.
 
Control JRadioButton
 
Vamos a crear otra aplicacion donde veremos el funcionamiento de los botones de
radio. Crearemos tres botones de radio que nos indicaran lo siguiente:
 
o Azul
o Verde
o Amarillo
 
Cuando seleccionemos uno de ellos, los demas se deseleccionaran, y cuando
pulsemos el boton confirmar, en el campo de texto aparecera la seleccion que
hemos hecho.
Aqui el codigo:
 
import javax.swing.*;
import java.awt.event.*;
 
public class MiVentana extends JFrame implements ActionListener{
 
    JTextField cmpSeleccion;
    JButton btnConfirmar;
    JRadioButton rbAzul, rbVerde, rbAmarillo;
    ButtonGroup grupo;
 
    public MiVentana(){
        this("Casillas de verificacion",10,10,250,200);
  }
 
    public MiVentana(String titulo, int x, int y, int w, int h){
        super(titulo);
        this.getContentPane().setLayout(null);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(x,y,w,h);
        this.setVisible(true);
 
        rbAzul = new JRadioButton("Azul");
            rbAzul.setBounds(10,10,80,20);
            this.getContentPane().add(rbAzul);
        rbVerde = new JRadioButton("Verde");
            rbVerde.setBounds(10,30,80,20);
            this.getContentPane().add(rbVerde);
        rbAmarillo = new JRadioButton("Amarillo");
            rbAmarillo.setBounds(10,50,80,20);
            this.getContentPane().add(rbAmarillo);
        grupo = new ButtonGroup();
            grupo.add(rbAzul);
            grupo.add(rbVerde);
            grupo.add(rbAmarillo);
 
        cmpSeleccion = new JTextField();
            cmpSeleccion.setBounds(10,80,150,20);
            this.getContentPane().add(cmpSeleccion);
        btnConfirmar = new JButton("Confirmar");
            btnConfirmar.setBounds(130,130,100,20);
            this.getContentPane().add(btnConfirmar);
 
            btnConfirmar.addActionListener(this);
 
        paintComponents(getGraphics());
  }
 
    public void actionPerformed(ActionEvent event){
        if(rbAzul.isSelected()){
            cmpSeleccion.setText("Radio color Azul");
    }
        if(rbVerde.isSelected()){
            cmpSeleccion.setText("Radio color Verde");
    }
        if(rbAmarillo.isSelected()){
            cmpSeleccion.setText("Radio color Amarillo");
    }
  }
 
    public static void main(String[]args){
 
        MiVentana mv = new MiVentana();
 
  }
}

 
Fijate como los tres botones de verificacion se encuentran dentro del grupo que
hemos creado. Si no fuese asi, los botones serian totalmente independientes.
Botones de comando
Swing - JButton

El tercer control visual de uso muy común es el que provee la clase JButton. Este
control visual muestra un botón.
El proceso para añadir botones a un control JFrame es similar a añadir controles
de tipo JLabel.
Ahora veremos la captura de eventos con los controles visuales. Uno de los
eventos más comunes es cuando hacemos clic sobre un botón.
Java implementa el concepto de interfaces para poder llamar a métodos de una
clase existente a una clase desarrollada por nosotros.
Problema 1:
Confeccionar una ventana que muestre un botón. Cuando se presione finalizar la
ejecución del programa Java.
Programa:
Ver video

import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener {
JButton boton1;
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
formulario1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
La mecánica para atrapar el clic del objeto de la clase JButton se hace mediante la
implementación de una interface. Una interface es un protocolo que permite la
comunicación entre dos clases. Una interface contiene uno o más cabecera de
métodos, pero no su implementación. Por ejemplo la interface ActionListener tiene
la siguiente estructura:
interface ActionListener {
public void actionPerformed(ActionEvent e) {
}
Luego las clases que implementen la interface ActionListener deberán especificar
el algorítmo del método actionPerformed.
Mediante el concepto de interfaces podemos hacer que desde la clase JButton se
puede llamar a un método que implementamos en nuestra clase.
Para indicar que una clase implementará una interface lo hacemos en la
declaración de la clase con la sintaxis:
public class Formulario extends JFrame implements ActionListener
{
Con esto estamos diciendo que nuestra clase implementa la interface
ActionListener, luego estamos obligados a codificar el método actionPerformed.
Definimos un objeto de la clase JButton:
JButton boton1;
En el constructor creamos el objeto de la clase JButton y mediante la llamada del
método addActionListener le pasamos la referencia del objeto de la clase JButton
utilizando la palabra clave this (this almacena la dirección de memoria donde se
almacena el objeto de la clase JFrame, luego mediante dicha dirección podemos
llamar al método actionPerformed):
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
El método actionPerformed (este método de la interface ActionListener debe
implementarse obligatoriamente, en caso de no codificarlo o equivocarnos en su
nombre aparecerá un mensaje de error en tiempo de compilación de nuestro
programa.
El método actionPerformed se ejecutará cada vez que hagamos clic sobre el
objeto de la clase JButton.
La interface ActionListener y el objeto de la clase ActionEvent que llega como
parámetro están definidos en el paquete:
import java.awt.event.*;
Es decir que cada vez que se presiona el botón desde la clase JButton se llama al
método actionPerformed y recibe como parámetro un objeto de la clase
ActionEvent.
En el método actionPerformed mediante el acceso al método getSource() del
objeto que llega como parámetro podemos analizar que botón se presionó:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
Si se presionón el boton1 luego el if se verifica verdadero y por lo tanto llamando
al método exit de la clase System se finaliza la ejecución del programa.
La main no varía en nada con respecto a problemas anteriores.
Problema 2:
Confeccionar una ventana que contenga tres objetos de la clase JButton con las
etiquetas "1", "2" y "3". Al presionarse cambiar el título del JFrame indicando cuál
botón se presionó.

Programa:
Ver video

import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JButton boton1,boton2,boton3;
public Formulario() {
setLayout(null);
boton1=new JButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=new JButton("2");
boton2.setBounds(110,100,90,30);
add(boton2);
boton2.addActionListener(this);
boton3=new JButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
setTitle("boton 1");
}
if (e.getSource()==boton2) {
setTitle("boton 2");
}
if (e.getSource()==boton3) {
setTitle("boton 3");
}
}
public static void main(String[] ar){
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,350,200);
formulario1.setVisible(true);
formulario1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Debemos declarar 3 objetos de la clase JButton:
private JButton boton1,boton2,boton3;
En el constructor creamos los tres objetos de la clase JButton y los ubicamos
dentro del control JFrame (también llamamos al método addActionListener para
enviarle la dirección del objeto de la clase Formulario):
public Formulario() {
setLayout(null);
boton1=new JButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=new JButton("2");
boton2.setBounds(110,100,90,30);
add(boton2);
boton2.addActionListener(this);
boton3=new JButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
Cuando se presiona alguno de los tres botones se ejecuta el método
actionPerformed y mediante tres if verificamos cual de los botones se presionó:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
setTitle("boton 1");
}
if (e.getSource()==boton2) {
setTitle("boton 2");
}
if (e.getSource()==boton3) {
setTitle("boton 3");
}
}
Según el botón presionado llamamos al método setTitle que se trata de un método
heredado de la clase JFrame y que tiene por objetivo mostrar un String en el título
de la ventana.

Agrupar controladores: Marcos


Controles RichFaces incluidos en el UI
Descripción
A continuación se detallan aspectos importantes en la funcionalidad y estética de los controles de
interfaz de usuario de RichFaces utilizados en la aplicación UI generada por el arquetipo madeja-
arquetipo-richfaces.

Layout
Las principales áreas de la pantalla del usuario que son controladas mediante el
componente rich:layoutPanel son:
 Cabecera
 Contenido
 Pie de Página
El layout ha sido
diseñado con la intención de la reutilización de las partes generales de toda la aplicación, para así
evitar el retrabajo, copiar/pegar código y estilos CSS dispersos por todas las páginas.
El layout está basado en los controles rich:layout y rich:layoutPanel de RichFaces y en las
funcionalidades de composición e inclusión de Facelets.
Con las etiquetas de Facelets ui:insert y ui:define se tiene una plantilla conformada por varias páginas
xhtml para facilitar su mantenimiento.

Cabecera
Está conformada por la imagen de la dirección que corresponda y por la imagen del proyecto.
Incluye también el menú de navegación horizontal, con los iconos genéricos y muestra la ruta de la
página actual.
Contenido
El contenido está dividido principalmente en dos áreas, el contenido superior y el inferior.

Estas dos
áreas serán las las áreas de trabajo, es decir, donde el usuario tiene la mayor interactividad con la
aplicación.
La plantilla también contempla las áreas izquierda y derecha de cada contenido, aunque son menos
utilizadas, es conveniente considerarlas para mostrar al usuario por ejemplo información adicional.
Pie de
Página
En el pie de página solo se muestra texto informativo.

Partes del layout


En resumen, la plantilla de RichFaces está dividida en las partes que muestra la siguiente imagen:

La
mayor ventaja de diseñar las plantillas con facelets y con los componentes de RichFaces
rich:layout  y rich:layoutPanel, es que la distribución del contenido puede ser distinta, según las
necesidades de la aplicación, por ejemplo como se muestra en la siguiente imagen:
Menú
El control rich:toolBar es una barra horizontal que permite incluir elementos de tipo menú con varias
opciones desplegables y elementos de tipo botón con icono. La linea vertical que separa cada
elemento es el atributo "itemSeparator="line".
Los diferentes elementos que pueden estar contenidos en esta barra horizontal son de tres tipos:
 rich:dropDownMenu
Este control se utiliza cuando se desea que se desplieguen hacia abajo más opciones de menú.
 rich:menuItem
Este control se utiliza cuando se desea que el elemento sea un botón de navegación, es decir, cuando
el usuario haga click en el elemento navegará a otra página de la aplicación. Los elementos de tipo
rich:menuItem pueden ser agrupados en categorias mediante el control rich:menuGroup.
 rich:toolBarGroup
Este control agrupa botones con imagen, tal es el caso de los botones generales de Inicio, Contacta,
Ayuda y Cerrar.

Lista
El control rich:dataTable muestra una lista de elementos en forma de tabla, si a este control se le
asigna un paginador rich:datascroller, la tabla se mostrará paginada. El número de registros
mostrados por página es customizable mediante el atributo rows del control rich:dataTable.
El listado incluye los controles de interfaz que comúnmente deberá tener un listado:

Ordenamiento por columnas


Las columnas del control~~ rich:dataTable~~ son de tipo rich:column, cada columna tiene
un facet de tipo header donde se indica el contenido del encabezado de la columna, generalmente
texto, pero puede ser cualquier elemento JSF.
El ordenamiento que proporciona RichFaces out-of-the-box es alfabético o numérico ascendente y
descendente. Simplemente indicando en la propiedad sortBy la expresión EL (expression language)
del valor por el que será ordenada esa columna.
En caso de requerir un ordenamiento complejo, será necesario indicar el
atributo selfSorted="false" y en el atributo sortOrder la expresión EL del método del bean que
realizará el ordenamiento de los elementos.

Edición de elemento
La edición del valor de los elementos puede ser de dos tipos, en la misma tabla o en el formulario. El
control rich:inplaceInput nos permite obtener el efecto de que un texto de salida, se convierta en un
campo de entrada y que se muestre una pequeña marca de que el valor ha sido cambiado.
La edición tradicional mediante campos de formulario es con el icono de consulta/edición.

Eliminación de elemento
El control a4j:commandLink permite realizar una llamada ajax al método del bean encargado de
eliminar el elemento de la lista. El atributo reRender indica el nombre del control que deberá ser
refrescado, en este caso es la tabla completa, sin notar el refresco completo de la pantalla sino
únicamente de la lista.

Vista rápida de elemento


El control rich:toolTip permite mostrar mayor información del elemento sobre el que está el puntero
del ratón.
Árbol
El control rich:tree muestra un árbol de opciones, es un componente que muestra datos jerárquicos
como un grafo ordenado, consistente en ramas y nodos. Permite la construcción dinámica y estática
de hojas para el árbol, también proporciona información sobre la ruta del nodo seleccionado.
El modo de switching puede ser server, ajax y client. Es recomendable que sea ajax ya que guarda el
estado de los nodos abiertos y evita que el usuario vea un refresco total de la pantalla.
Los iconos son customizables ya que el control rich:treeNode tiene los atributos iconLeaf e icon que
son las imágenes a mostrar por cada nodo.
También se puede customizar el icono a mostrar cuando la rama está cerrada o abierta, esto es con
los atributos iconExpanded e iconCollapsed.
El árbol está inmerso en un rich:panel con la intención de que en cuanto se abran varias ramas y se
desborde en tamaño, de manera automática aparezcan las barras de desplazamiento (scrollbar)
ya sea la vertical, la horizontal o ambas.
Es una propiedad CSS estandar overflow:auto que se le indica al atributo~~ bodyClass~~ del
control rich:panel.
Formulario
Los controles del formulario, son elementos JSF estándar: h:form, h:outputText y h:inputText. Los
elementos RichFaces que ofrecen mayores funcionalidades que los estándar son rich:calendar para
las fechas con el Locale y el formato que se desee y rich:inplaceInput para que un texto de salida se
convierta en un campo de entrada al hacer click sobre el texto. El estilo de las etiquetas se indica
mediante el atributo styleClass.

Pestañas
Mediante el control rich:tabPanel de RichFaces, es posible la creación de pestañas. Es posible crear
pestañas dinámicamente asignándole un objeto del
tipo org.richfaces.component.html.HtmlTabPanel al atributo* binding* del control rich:tabPanel.
Tiene 3 modos de switching entre pestañas: servidor, ajax y cliente.
La utilización de pestañas (tabs) en las aplicaciónes es importante ya que al usuario se le muestra de
una manera categorizada o agrupada en capas solapadas una extensa cantidad de datos de entrada
o de salida, por lo que la página no se mostrará sobrecargada de información.

Ventana Modal
El contro rich:modalPanel permite asignar acciones a distintos eventos JavaScript: onbeforeshow,
onhide, onmove, onresize, onmaskmouseout. Se le puede especificar el ancho y alto mínimos en
pixeles y puede guardar el estado del contenido de la ventana modal después de hacer submit.
También mediante una función de javaScript es posible controlar la visibilidad de la ventana.
El componente cambia de apariencia visual según los atributos style y styleClass. Por defecto coge la
combinación de colores del parámetro del bean que gestiona el skin de la aplicación.
El usuario tiene que aceptar, cancelar o cerrar la ventana emergente que flota encima de la ventana
principal ya que no se le permitirá interactuar con la ventana padre.

NetBeans Conectar formulario con base datos


Ejemplo
Solucion
desarrolle un sistema en java, como normalmente usas muchos formularios hay tener un buen
diseño para reutilizar codigo algo asi hice yo:
public interface EditorRegistro{
public void actualizarRegistro( Object [] value);
public void visualizarRegistro(Object []value);
public void insertarRegistro();
public void eliminarRegistro();
public void EOF();
public Object[] getValues();
pulic Component getComponent();
y todos los editores (formularios para ti) derivan de esta interface, te aclaro que use el api JDBC
para trabajar con la BD, el arreglo value tiene todos los datos de la tabla, el metodo get Values()
devuelve los datos a un preparedStatement ya sea para un insert o un Update
espero que te sirva

Cómo diseñar un formulario de inicio de sesión /registro y


conectarlos con la base de datos MySQL
En este tutorial de Java veremos cómo diseñar un formulario de inicio de sesión y registro y
conectar estos dos formularios con la base de datos MySQL.

¿Qué usaremos para construir este proyecto? :


- Lenguaje de programación Java.
- Editor de NetBeans.
- Base de datos MySQL.
- PhpMyAdmin.

¿Qué haremos en este proyecto? :


- Diseñar las dos formas usando jpanels y bordes.
- Hacer su propio icono de cierre y minimice usando jlabel.
- Navegar entre el formulario de inicio de sesión y el formulario de registro utilizando una
etiqueta.
- Crear una conexión entre Java y MySQL.
- Crear un botón j en cada ventana, uno para iniciar sesión y el segundo para crear una
nueva cuenta.
- Crear una base de datos mysql para almacenar los datos de los usuarios.
- Comprovar si el nombre de usuario o la contraseña están vacíos.
- En el registro jframe verifique si los campos están vacíos y si el usuario vuelve a ingresar
la contraseña correcta.
- Crear un botón para brose la imagen y configure la ruta de la imagen en una etiqueta.
- Guardar la imagen como un blob en la base de datos mysql.
- Marcar si el usuario ingresa un nombre de usuario que ya existe.

Conexión Netbeans y SQL Server


En el siguiente programa conectamos NetBeans y SQL Server, donde
creamos botones que nos permita crear, registrar, actualizar y Eliminar
datos de una tabla.

Primero comenzamos creando nuestro primer proyecto, la cual tendrá por


nombre TiendaDeAbarrotes, crearemos un Package de
nombre tiendadeabarrotes dentro de este package crearemos 3
clases: Conexion, Productos y TiendaDeAbarrotes y 1 formulario
(JFrame Form) de nombre GuiTienda.
A continuación comenzamos a crear el diseño de nuestra aplicación en
nuestro formulario GuiTienda, la cual quedará de la siguiente manera:

Ahora empezamos a crear nuestra base de datos en SQL Server. El nombre


de nuestra base de datos será: Tienda1 y nuestra tabla Productos.
Dentro de la tabla Productos creamos nuestros campos: Codigo, Nombre,
Cantidad, Precio
Luego crearemos un procedimiento la cual llamaremos AgregarProducto.

Dentro de este procedimiento escribimos lo siguiente:

ALTER PROCEDURE [dbo].[AgregarProducto]


-- Add the parameters for the stored procedure here
@nombre nvarchar(10), @cantidad int, @precio decimal(10,2)
AS
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from


-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

declare @codigo int=1+(select MAX(Codigo)from Productos)


if not exists(select Nombre from Productos where Nombre=@nombre)
insert into Productos(Codigo, Nombre, Cantidad, Precio)
values (@codigo, @nombre, @cantidad, @precio)

END

A continuación seleccionamos todo el procedimiento y damos clic en el


ícono de ejecutar, guardamos y cerramos el programa.
Regresamos al diseño de nuestra Aplicación en Netbeans y comenzamos
con la codificación.
  Para la clase Conexión

package tiendadeabarrotes;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;

public class Conexion {


private String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String url="jdbc:sqlserver://localhost:1433;databaseName=Tienda1";
private String user="Gabita";
private String pass="123";
Conexion(){
}

public Connection conectar(){


try {
Class.forName(driver);
return(DriverManager.getConnection(url, user, pass));
} catch (Exception e) {

}
return null;
}

public void CerrarConexion(Connection con){


try {
con.close();
} catch (Exception e) {
}
}
}

  Para la clase Productos

package tiendadeabarrotes;
import java.sql.*;
import javax.swing.table.DefaultTableModel;

public class Productos {


Connection cn;
private int codigo;
private String nombre;
private int cantidad;
private float precio;

public Productos(){
Conexion con=new Conexion();
cn= con.conectar();
}

public void LLenarDatos(DefaultTableModel modelo){


try {
String sql="select * from Productos";
CallableStatement cmd=cn.prepareCall(sql);
ResultSet rs= cmd.executeQuery();

while(rs.next()){
Object[] datos=new Object[4];

for(int i=0;i<4;i++){
datos[i]=rs.getString(i+1);
}
modelo.addRow(datos);
}
cmd.close();
cn.close();

} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public void Agregar1 (String nombre, int cantidad, float precio){


try {
String sql="execute AgregarProducto ?,?,?";
PreparedStatement cmd=cn.prepareCall(sql);
cmd.setString(1, nombre);
cmd.setInt(2, cantidad);
cmd.setFloat(3, precio);
cmd.execute();
cmd.close();
cn.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

  Para la clase TiendaDeAbarrotes

package tiendadeabarrotes;
public class TiendaDeAbarrotes {

public static void main(String[] args) {


GuiTienda object= new GuiTienda();
object.setVisible(true);
}
}

  Para el formulario GuiTienda

package tiendadeabarrotes;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class GuiTienda extends javax.swing.JFrame {


Connection cn;

public GuiTienda() {
initComponents();
Conexion con=new Conexion();
cn= con.conectar();
iniciar();
}

private void Limpiar(JTable tablas){


while(tablas.getRowCount()>0){
((DefaultTableModel) tablas.getModel()).removeRow(0);
}
}

private void iniciar(){


Limpiar(Tabla);
DefaultTableModel modelo= (DefaultTableModel) Tabla.getModel();
Productos e= new Productos();
e.LLenarDatos(modelo);
}

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


Productos p= new Productos();
String nombrePro=txtnombre.getText();
int cantidadPro=Integer.parseInt(txtcantidad.getText());
float precioPro=Float.parseFloat(txtprecio.getText());
p.Agregar1(nombrePro,cantidadPro,precioPro);
iniciar();
}

private void TablaMouseClicked(java.awt.event.MouseEvent evt) {

DefaultTableModel modelo=(DefaultTableModel) Tabla.getModel();


txtcodigo.setText(modelo.getValueAt(Tabla.getSelectedRow(), 0)+" ");
txtnombre.setText(modelo.getValueAt(Tabla.getSelectedRow(), 1)+" ");
txtcantidad.setText(modelo.getValueAt(Tabla.getSelectedRow(), 2)+" ");
txtprecio.setText(modelo.getValueAt(Tabla.getSelectedRow(), 3)+" ");
}
private void btnactualizarActionPerformed(java.awt.event.ActionEvent evt) {

try {

PreparedStatement pst= cn.prepareStatement("UPDATE Productos SET


Nombre='"+txtnombre.getText()+"',Cantidad='"+txtcantidad.getText()
+"',Precio='"+txtprecio.getText()+"'WHERE Codigo='"+txtcodigo.getText()+"'");

pst.executeUpdate();
iniciar();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

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

int fila=Tabla.getSelectedRow();
String cod="";
cod=Tabla.getValueAt(fila, 0).toString();
try {

PreparedStatement pst=cn.prepareStatement("DELETE FROM Productos


WHERE Codigo='"+cod+"'");

pst.executeUpdate();
iniciar();

} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
txtcodigo.setText("");
txtnombre.setText("");
txtcantidad.setText("");
txtprecio.setText("");
}

pero para que todo funcione correctamente se debe seguir el paso de


adicionar el: sqljdbc4.jar en la librería y servicios.

Y para terminar ejecutamos nuestra Aplicación y nos debe salir de la


siguiente forma:
Conectividad de Base de Datos con JDBC
Java – Conexión a base de datos con JDBC
En este ejemplo nos conectaremos a una base de datos MariaDB con JDBC para hacer
obtener los datos de un query SELECT a una tabla de «Usuarios».  Antes que nada debes
saber que existen prácticas para hacer más eficiente la conexión recurrente a una base de
datos, una de las más comunmente usadas son el uso de spools de conexiones, que te
permiten optimizar las conexiones y son el método estandar en aplicaciones empresariales. 
Este ejemplo es para que aprendas a hacer la conexión básica y no necesariamente es la
forma óptima, esto dependerá de las necesidades de tu proyecto.
Hemos creado una base de datos de ejemplo llamada «Pruebas» con una sola tabla.

Esta es la tabla que creamos:


CREATE TABLE Usuarios (

ID int(11) NOT NULL AUTO_INCREMENT,

USERNAME varchar(100) NOT NULL,

PASSWORD varchar(100) NOT NULL,

NOMBRE varchar(100) DEFAULT NULL,

PRIMARY KEY (ID)

Agregamos algunos datos:


Para el código en Java esta es la dependencia de Maven para el driver de MariaDB:
<dependency>

<groupId>org.mariadb.jdbc</groupId>

<artifactId>mariadb-java-client</artifactId>

<version>2.2.3</version>

</dependency>

Vamos al código.
package com.decodigo.ejemplos;

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

*
* @author decodigo

*/

public class ConexionMariaDB {

private static final String DRIVER = "org.mariadb.jdbc.Driver";

private static final String URL_CONEXION = "jdbc:mariadb://localhost:3306/Pruebas";

public static void main(String args[]) throws SQLException {

final String usuario = "user_db";

final String password = "password_db";

Connection dbConnection = null;

Statement statement = null;

try {

Class.forName(DRIVER);

Connection conn = DriverManager.getConnection(URL_CONEXION, usuario, password);

String selectTableSQL = "SELECT ID,USERNAME,PASSWORD,NOMBRE FROM


Usuarios";

statement = conn.createStatement();

ResultSet rs = statement.executeQuery(selectTableSQL);

while (rs.next()) {

String id = rs.getString("ID");

String usr = rs.getString("USERNAME");

String psw = rs.getString("PASSWORD");

String nombre = rs.getString("NOMBRE");

System.out.println("userid : " + id);


System.out.println("usr : " + usr);

System.out.println("psw : " + psw);

System.out.println("nombre : " + nombre);

} catch (SQLException e) {

System.out.println(e.getMessage());

} catch (ClassNotFoundException e) {

System.out.println(e.getMessage());

} finally {

if (statement != null) {

statement.close();

if (dbConnection != null) {

dbConnection.close();

Hay varias cosas que debes entender de este código.  La primera es que deberás cargar en el
ambiente de Java, el driver que será el encargado de gestionar la conexión con la base de
datos y existe uno para cada base de datos.