jtable manejo

Iniciado por geanca, 19 Febrero 2012, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

geanca

Buenas tardes me presento soy geanca de paysandu republica oriental del URUGUAY

estoy intentando realizar una aplicacion con jtable
en la cual pueda manipular3 datos en una base de datos


en fin lo que quiero hacer es lo siguiente
en un jframa colocar un jtable y 2 boton (ingresar,cargar)
ingresar datos en el jtable y al presionar el boton ingresar insertarlos en la base de datos

y al presionar el boton cargar me traiga los datos de la base y la carge en el jtable

agradezco si alguien tiene algun ejemplo me pueda enviandomelo
muchas gracias

jperezmonge

Yo te aconsejo que crees un ModeloJTableNombre extends AbstractTableModel, así desde esa clase podrás hacer la carga y descarga de los datos en un arrayList que esta almacenado en ModeloJTableNombre mediante métodos, creo que mucho mas intuitivo.

Debci

Podrías aportarnos algo que ya tengas hecho?
Leete las normas, se bienvenido al foro.

Saludos

jperezmonge

#3
Aquí os dejo un ejemplo, a ver si con este código os soluciono algo. Son códigos muy grandes, ahí alguna forma para poder subir los dos archivos y ya te lo miras tu en algún entorno IDE? y donde están las normas para leérmelas :).

UsuarioJTable:
package vista;


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import controlador.ModeloJTableUsuario;

import modelo.Usuario;


/**
*
* @author maquinavirtual
*
*/
public class UsuarioJTable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPanel jPanelEntradaDatos = null;
private JButton jButtonInsertarUsuario = null;
private JButton jButtonEliminarUsuario = null;
private JPanel jPanelJListUsuario = null;
private JTable jTableUsuario = null;




// panel inferior con la informacion de la Usuario
private PanelInfoUsuario panelInfoUsuario = null ;

// ventanas llamadas ( una sola ventana para todas las llamadas )
private VentanaInsertarUsuario ventanaInsertarUsuario = null ;

// variable que almacena el modelo del JTableUsuario ( modelo para almacenar Usuarioes )
private ModeloJTableUsuario modeloJTableUsuario = null ;



/**
* @return the modeloJTableUsuario
*/
public ModeloJTableUsuario getModeloJTableUsuario() {

if ( modeloJTableUsuario == null ){
modeloJTableUsuario = new ModeloJTableUsuario();
}
return modeloJTableUsuario;

}

/**
* This is the default constructor
*/
public UsuarioJTable() {
super();
initialize();
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(470, 370);
this.setContentPane(getJContentPane());
this.setTitle("JTable con Usuario");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.addWindowListener(new WindowListener() {

@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowClosing(WindowEvent arg0) {
Component frame = null;
int n = JOptionPane.showConfirmDialog(
   frame,
   "¿Desea Guardar los datos antes de salir?",
   "Responde antes de salir",
   JOptionPane.YES_NO_OPTION);
if(n == 0){
ModeloJTableUsuario modelo = getModeloJTableUsuario();
modelo.guardarDatos();
}
dispose();

}

@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub

}
}
);
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJPanelEntradaDatos(), BorderLayout.NORTH);
jContentPane.add(getJPanelJListUsuario(), BorderLayout.CENTER);
jContentPane.add(getPanelInfoUsuario(), BorderLayout.SOUTH);
}
return jContentPane;
}

/**
* This method initializes jPanelEntradaDatos
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelEntradaDatos() {
if (jPanelEntradaDatos == null) {
FlowLayout flowLayout = new FlowLayout();
flowLayout.setHgap(10);
flowLayout.setVgap(10);
flowLayout.setAlignment(FlowLayout.LEFT);
jPanelEntradaDatos = new JPanel();
jPanelEntradaDatos.setLayout(flowLayout);
jPanelEntradaDatos.add(getJButtonInsertarUsuario(), null);
jPanelEntradaDatos.add(getJButtonEliminarUsuario(), null);
}
return jPanelEntradaDatos;
}

/**
* This method initializes jButtonInsertarUsuario
*
* @return javax.swing.JButton
*/
private JButton getJButtonInsertarUsuario() {
if (jButtonInsertarUsuario == null) {
jButtonInsertarUsuario = new JButton();
jButtonInsertarUsuario.setText(" Insertar Usuario ");
jButtonInsertarUsuario.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {


// variable con el panel de informacion de Usuario
PanelInfoUsuario panelInfoUsuario = getVentanaInsertarUsuario().getPanelDatosUsuario();


// Peticion de foco en el campo de nombre
panelInfoUsuario.getjTextFieldDni().requestFocus();


// si se hace click en aceptar Usuario
if ( VentanaInsertarUsuario.C_ACEPTAR_USUARIO == getVentanaInsertarUsuario().mostrarVentanaModal() ){

//System.out.println("Acepta Usuario");
String dni = panelInfoUsuario.getjTextFieldDni().getText();
String nombre = panelInfoUsuario.getjTextFieldNombre().getText();
String telefono = panelInfoUsuario.getjTextFieldTelefono().getText();

// creo un Usuario
Usuario p;
try {

p = new Usuario(dni, nombre, telefono);

ModeloJTableUsuario modelo = getModeloJTableUsuario();

// agrego la Usuario al modelo
modelo.insertaUsuario(p);

// Mostramos la informacion de la Usuario en el panel inferior
getPanelInfoUsuario().mostrarDatosUsuario(p);


} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}


}

// limpiamos los campos
panelInfoUsuario.limpiarCampos();

}
});
}
return jButtonInsertarUsuario;
}

/**
* This method initializes jButtonEliminarUsuario
*
* @return javax.swing.JButton
*/
private JButton getJButtonEliminarUsuario() {
if (jButtonEliminarUsuario == null) {
jButtonEliminarUsuario = new JButton();
jButtonEliminarUsuario.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

// obtenemos el modelo
ModeloJTableUsuario modelo = getModeloJTableUsuario();

int index = getJTableUsuario().getSelectedRow();

// Si se selecciona un elemento en la lista
if (  index >= 0 ) {

modelo.eliminarUsuario(index);

getPanelInfoUsuario().limpiarCampos();
}
}
});
jButtonEliminarUsuario.setText(" Eliminar Usuario ");
}
return jButtonEliminarUsuario;
}

/**
* This method initializes jPanelJListUsuario
*
* @return javax.swing.JPanel
*/
private JPanel getJPanelJListUsuario() {
if (jPanelJListUsuario == null) {
jPanelJListUsuario = new JPanel();
jPanelJListUsuario.setLayout(new BorderLayout());
jPanelJListUsuario.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
//jPanelJListUsuario.add(getJTableUsuario(), BorderLayout.CENTER);

JScrollPane scrollPane = new JScrollPane(getJTableUsuario());;
jPanelJListUsuario.add(scrollPane,BorderLayout.CENTER);
}
return jPanelJListUsuario;
}

/**
* This method initializes jListUsuario
*
* @return javax.swing.JList
*/
private JTable getJTableUsuario() {

if (jTableUsuario == null) {

// le asigno un modelo al constructor
jTableUsuario= new JTable();

//Seleccion de un solo elemento
jTableUsuario.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

//Escuchador de tecla
jTableUsuario.addKeyListener(new KeyAdapter() {

@Override
public void keyReleased(KeyEvent e) {

JTable jtable = (JTable) e.getSource();

//Coge la tecla pulsada y comprueba si es una flecha
int teclaPulsada = e.getKeyCode();

if(teclaPulsada == KeyEvent.VK_UP || teclaPulsada == KeyEvent.VK_DOWN || teclaPulsada == KeyEvent.VK_TAB){

//int fila = jtable.getSelectedRow();

// Usuario seleccionada del JList
Usuario p = (Usuario)modeloJTableUsuario.devolverUsuario(jtable.getSelectedRow());

//Mostrar datos de la Usuario
getPanelInfoUsuario().mostrarDatosUsuario(p);
}
}
});


jTableUsuario.setModel( getModeloJTableUsuario() );       // asigno el modelo

jTableUsuario.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {

JTable jtable = (JTable) e.getSource();

int numeroClicks = e.getClickCount();

// Usuario seleccionada del JList
Usuario p = (Usuario)modeloJTableUsuario.devolverUsuario(jtable.getSelectedRow());

// Si hay algo seleccionado
if ( ( jtable.getSelectedRow() >= 0 ) && ( numeroClicks == 2 ) ){

// variable con el panel de informacion de Usuario
PanelInfoUsuario panelInfoUsuario = getVentanaInsertarUsuario().getPanelDatosUsuario();

// Usuario seleccionada del JList
panelInfoUsuario.mostrarDatosUsuario(p);

// Peticion de foco en el campo de nombre
panelInfoUsuario.getjTextFieldDni().requestFocus();



// Mostrar el cuadro de dialogo con los datos de la Usuario
// si se hace click en aceptar Usuario
if ( VentanaInsertarUsuario.C_ACEPTAR_USUARIO == getVentanaInsertarUsuario().mostrarVentanaModal() ){

// capturo los nuevos valores
String dni = panelInfoUsuario.getjTextFieldDni().getText();
String nombre = panelInfoUsuario.getjTextFieldNombre().getText();
String telefono = panelInfoUsuario.getjTextFieldTelefono().getText();
try {

// asigno los nuevos valores para la Usuario
p.setDni(dni);
p.setNombre(nombre);
p.setTelefono(telefono);

// mostramos el panel inferior con los nuevos datos de la Usuario
getPanelInfoUsuario().mostrarDatosUsuario(p);

getModeloJTableUsuario().fireTableDataChanged();

} catch (Exception e1) {
//
e1.printStackTrace();
}

} // de if

// limpiamos los campos
panelInfoUsuario.limpiarCampos();


}


//Muestra en el panel inferior el valor seleccionado en el jTable
if( jtable.getSelectedRow() >= 0){

getPanelInfoUsuario().mostrarDatosUsuario(p);

}
}
});

}
return jTableUsuario;

}



// Metodo que devuelve un panel con la informacion de la Usuario
private PanelInfoUsuario getPanelInfoUsuario(){

if ( panelInfoUsuario == null ){
panelInfoUsuario = new PanelInfoUsuario();
}
return panelInfoUsuario;

}

// obtengo la ventana de insertar Usuario
private VentanaInsertarUsuario getVentanaInsertarUsuario(){

if ( ventanaInsertarUsuario == null ){
ventanaInsertarUsuario = new VentanaInsertarUsuario();
}
ventanaInsertarUsuario.setLocationRelativeTo(this);

return ventanaInsertarUsuario;

}

}  //  @jve:decl-index=0:visual-constraint="10,10"


Clase ModeloJTableUsuario:
package controlador;

import java.sql.Connection;




/**
*
* @author maquinavirtual
*
*/
public class ModeloJTableUsuario extends AbstractTableModel {

/**
*
*/
private static final long serialVersionUID = 1L;
//Coleccion que almacena los datos del modelo
private ArrayList<Usuario> myData = null;
private String[] nombreColumnas = {"Dni" , "Nombre", "Telefono"};


/**
* Constructor vacío
* */
public ModeloJTableUsuario() {
myData = cargarDatos();
}

private ArrayList<Usuario> cargarDatos() {

ArrayList<Usuario> temporal = new ArrayList<Usuario>();


//Creación del objeto que conectará a la BD
ConnectionJDBC cj = new ConnectionJDBC();

ConnectionJDBC cjMySqlJDBC = new ConnectionJDBC();
Statement dbStatement = null;
ResultSet dbResulSet = null;

try {
Connection dbConnectMysql = cjMySqlJDBC.getConnection("jdbc:mysql://127.0.0.1/entorno","user","user");

//creo un objeto Statement
dbStatement = dbConnectMysql.createStatement();

//creo un objeto ResulSet para realizar una consulta a la base de datos
dbResulSet = dbStatement.executeQuery("SELECT * from usuario");

//recorremos la consulta
while(dbResulSet.next()){

//obtengo el identificador
String dni  = dbResulSet.getString(1);

//obtengo el descripcion
String nombre = dbResulSet.getString(2);

//obtengo el telefono
String telefono = dbResulSet.getString(3);

try {
temporal.add(new Usuario(dni, nombre, telefono));
} catch (Exception e) {
e.printStackTrace();
}
}

System.out.println("conexión creada");
cj.closeConnection(dbConnectMysql, dbStatement);
System.out.println("conexión cerrada");

} catch (SQLException e) {

e.printStackTrace();
}


return temporal;

}

/**
* Método que inserta un perfil(por si no se nota...)
* */
public void insertaUsuario(Usuario p){

if(p != null){

myData.add(p); //Inserto el perfil en el modelo

//Notifica a la tabla que han habido cambios
this.fireTableDataChanged();
}

}


public Usuario devolverUsuario (int fila){

if(fila >= 0 && fila < myData.size())
return myData.get(fila);

return null;

}

@Override
public String getColumnName(int column) {

return nombreColumnas[column];
}

/* (non-Javadoc)
* @see javax.swing.table.TableModel#getRowCount()
*/
@Override
public int getRowCount() {

return myData.size();
}

/* (non-Javadoc)
* @see javax.swing.table.TableModel#getColumnCount()
*/
@Override
public int getColumnCount() {

return 3;
}

/**
* Metodo que elimina un perfil
* */
public void eliminarUsuario(Usuario p){

if(p != null){

if(myData.contains(p)){

myData.remove(p);

//Notifica a la tabla que han habido cambios
this.fireTableDataChanged();
}


}

}


/**
* Metodo que elimina un perfil pasando un indice
* */
public void eliminarUsuario(int  index){

if(index >= 0 && index < myData.size()){

myData.remove(index);

//Notifica a la tabla que han habido cambios
this.fireTableDataChanged();

}

}


/* (non-Javadoc)
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {


switch (columnIndex) {

case 0:
return myData.get(rowIndex).getDni();

case 1:
return myData.get(rowIndex).getNombre();
case 2:
return myData.get(rowIndex).getTelefono();


default:
return null;
}

}

public void guardarDatos(){
//Creación del objeto que conectará a la BD
ConnectionJDBC cj = new ConnectionJDBC();

ConnectionJDBC cjMySqlJDBC = new ConnectionJDBC();
Statement dbStatement = null;

try {
Connection dbConnectMysql = cjMySqlJDBC.getConnection("jdbc:mysql://127.0.0.1/entorno","user","user");

//creo un objeto Statement
dbStatement = dbConnectMysql.createStatement();


//creo un objeto ResulSet para realizar una consulta a la base de datos
dbStatement.executeUpdate("delete from usuario");

Iterator<Usuario> it = myData.iterator();
//recorremos la consulta
while(it.hasNext()){
Usuario elem = it.next();

//obtengo el identificador
String dni = elem.getDni();

//obtengo el nombre
String nombre = elem.getNombre();

//obtengo el telefono
String telefono = elem.getTelefono();

//System.out.println(id + "," + descripcion);
dbStatement.executeUpdate("INSERT INTO usuario VALUES ( '" + dni + "', '" + nombre + "', '" + telefono + "')");

try {
} catch (Exception e) {
e.printStackTrace();
}
}


System.out.println("conexión creada");
cj.closeConnection(dbConnectMysql, dbStatement);

System.out.println("conexión cerrada");

} catch (SQLException e) {

e.printStackTrace();
}

}

}