Para el desarrollo de la presentación gráfica, que empezamos en este artículo, hemos optado por trabajar con el paquete swing, en vez de hacerlo directamente con awt.
Si revisáis los ejercicios anteriores veréis que ya tenemos lista la conexión, y una clase de acceso a datos que se encarga de realizar físicamente las altas, bajas y modificaciones, y controlar el puntero, en los listados, por lo que lo único que tiene que hacer esta clase es presentar la pantalla, recoger los datos e instanciar la clase de datos para que los grabe.
La primera parte se dedica a crear todos los componentes gráficos que va a utilizar
private JLabel lblTitulo = new JLabel("Titulo: ");
private JTextField txtTitulo = new JTextField(30);
private JLabel lblAutor = new JLabel("Autor: ");
private JTextField txtAutor = new JTextField(30);
private JLabel lblGenero = new JLabel("Genero: ");
private JTextField txtGenero = new JTextField(30);
private JLabel lblPrecio = new JLabel("Precio: ");
private JTextField txtPrecio = new JTextField(10);
private JButton btnGuardar=new JButton("Guardar");
private JButton btnLimpiar=new JButton("Limpiar");
El constructor tiene que llamar a super, ya que esta clase extiende JFrame, y una vez creado el frame, utiliza el metodo inicio() para rellenarlo con los elementos de la pantalla
public NuevoLibro(){
super("Añadir nuevo libro");
inicio();
}
public void inicio() {
this.getContentPane().setLayout(new GridLayout(5,2));
this.getContentPane().add(lblTitulo);
this.getContentPane().add(lblAutor);
this.getContentPane().add(txtTitulo);
this.getContentPane().add(txtAutor);
this.getContentPane().add(lblGenero);
this.getContentPane().add(lblPrecio);
this.getContentPane().add(txtGenero);
this.getContentPane().add(txtPrecio);
this.getContentPane().add(btnGuardar);
this.getContentPane().add(btnLimpiar);
this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
btnGuardar.addActionListener(this);
btnLimpiar.addActionListener(this);
this.setLocation(250,150);
this.setSize(400,200);
this.setVisible(true);
}
Utilizamos this.getContentPane(), para obtener el objeto panel existente en JFrame, y establecer el layout y cargarle todos los componentes (JLAbel, JTextField, y JBoton)
el comando this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE); establece el comportamiento del botón de cerrar ventana.
Le añadimos los ActionListener a los botones, y mostramos la pantalla.
A partir de ese momento, deberemos esperar a que el usuario realice alguna acción, p. ej. pulsando botones, para que nuestra clase sea llamada en el método actionPerformed()
public void actionPerformed(ActionEvent event) {
if (event.getSource()==btnGuardar)
guarda();
else if (event.getSource()==btnLimpiar)
limpia();
}
Al llegar a este método, deberémos averiguar desde donde ha sido llamado, para eso utilizamos event.getSource() que nos facilita el objeto que disparó el evento, lo comparamos con los posibles, (btnGuardar, y btnLimpiar) y en función de cual sea, lanzamos el metodo correspondiente.
void limpia() {
txtTitulo.setText("");
txtAutor.setText("");
txtGenero.setText("");
txtPrecio.setText("");
}
void guarda() {
String sentencia;
double precio;
if (txtTitulo.getText().trim().equals("")) {
VentanaError ve=new VentanaError("Falta el título");
return;
}
try {
precio=Double.parseDouble(txtPrecio.getText());
} catch (NumberFormatException e) {
VentanaError ve=new VentanaError
("El precio debe ser numérico");
return;
}
Libros l = new Libros();
l.setTitulo(txtTitulo.getText());
l.setGenero(txtGenero.getText());
l.setAutor(txtAutor.getText());
l.setPrecio(precio);
l.grabarRegistro();
}
El método limpia, mueve a los componentes de pantalla un cadena nula, para borrarlos, y dejarlos vacíos, mientras que el método guardar, comprueba que se haya entrado Titulo, y que el precio sea númerico, y, si todo esta bien, instancia un objeto Libros, carga los atributos con los datos entrados, y llama al método grabarRegistro() para dejar la información en la tabla.
Como siempre aquí está la clase completa:
package Ventana;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import AccesoAdatos.Libros;
import java.sql.*;
@SuppressWarnings("serial")
public class NuevoLibro extends JFrame implements ActionListener {
Statement sql=null;
private JLabel lblTitulo = new JLabel("Titulo: ");
private JTextField txtTitulo = new JTextField(30);
private JLabel lblAutor = new JLabel("Autor: ");
private JTextField txtAutor = new JTextField(30);
private JLabel lblGenero = new JLabel("Genero: ");
private JTextField txtGenero = new JTextField(30);
private JLabel lblPrecio = new JLabel("Precio: ");
private JTextField txtPrecio = new JTextField(10);
private JButton btnGuardar=new JButton("Guardar");
private JButton btnLimpiar=new JButton("Limpiar");
public NuevoLibro(){
super("Añadir nuevo libro");
inicio();
}
public void inicio() {
this.getContentPane().setLayout(new GridLayout(5,2));
this.getContentPane().add(lblTitulo);
this.getContentPane().add(lblAutor);
this.getContentPane().add(txtTitulo);
this.getContentPane().add(txtAutor);
this.getContentPane().add(lblGenero);
this.getContentPane().add(lblPrecio);
this.getContentPane().add(txtGenero);
this.getContentPane().add(txtPrecio);
this.getContentPane().add(btnGuardar);
this.getContentPane().add(btnLimpiar);
this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
btnGuardar.addActionListener(this);
btnLimpiar.addActionListener(this);
this.setLocation(250,150);
this.setSize(400,200);
this.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource()==btnGuardar)
guarda();
else if (event.getSource()==btnLimpiar)
limpia();
}
void limpia() {
txtTitulo.setText("");
txtAutor.setText("");
txtGenero.setText("");
txtPrecio.setText("");
}
void guarda() {
String sentencia;
double precio;
if (txtTitulo.getText().trim().equals("")) {
VentanaError ve=new VentanaError("Falta el título");
return;
}
try {
precio=Double.parseDouble(txtPrecio.getText());
} catch (NumberFormatException e) {
VentanaError ve=new VentanaError
("El precio debe ser numérico");
return;
}
Libros l = new Libros();
l.setTitulo(txtTitulo.getText());
l.setGenero(txtGenero.getText());
l.setAutor(txtAutor.getText());
l.setPrecio(precio);
l.grabarRegistro();
}
}
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.