Buenos días amigos, tengo un problema que me esta atormentando y al que no consigo darle una solución. Cuando le extraigo los datos una BBDD y se los agrego a la tabla todo va bien. Si presiono sobre otra pestaña se me carga la siguiente tabla sin problemas, pero si hago un clip sobre algún elemento de la segunda tabla cargada, se me visualiza la primero tabla que cargue y no logro eliminar esa tabla que permanece en segundo plano.
Este es mi código y muchas gracias de antemano.
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement;
import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel;
public class Principal {
public static void main(String[] args) { MarcoProductos marco1=new MarcoProductos(); marco1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); marco1.setVisible(true);
}
}
class MarcoProductos extends JFrame{ JPanel superior=new JPanel(); private JComboBox nombreTablas=new JComboBox(); private DatabaseMetaData datosBBDD; private ResultSet rs; private Connection con; private Statement st; private ResultSetModeloTabla modelo; //private DefaultTableModel modelo2; //private JButton reiniciar=new JButton("Reiniciar"); public MarcoProductos() { setTitle("Productos"); setBounds(400,300,800,400); try { con=DriverManager.getConnection("jdbc:mysql://localhost:8889/ping", "", ""); datosBBDD=con.getMetaData(); rs=datosBBDD.getTables(null, null, null, null); while(rs.next()) { //Para conseguir los nombres de la tabla nombreTablas.addItem(rs.getString("TABLE_NAME")); } } catch (SQLException e) { e.printStackTrace(); } //------------------------------------------------------------------------>>Action nombreTablas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { String tablaSeleccionada=(String) nombreTablas.getSelectedItem(); String consulta="SELECT * FROM "+tablaSeleccionada; try { st=miConexion.createStatement(); rs=st.executeQuery(consulta); modelo=new ResultSetModeloTabla(rs); JTable tabla=new JTable(); tabla.setModel(modelo); add(new JScrollPane(tabla),BorderLayout.CENTER); validate(); } catch (SQLException e1) { e1.printStackTrace(); } } }); superior.add(nombreTablas); //add(reiniciar,BorderLayout.SOUTH); add(superior,BorderLayout.NORTH); } }
class ResultSetModeloTabla extends AbstractTableModel{
private ResultSet rsRegistro; private ResultSetMetaData resmd; public ResultSetModeloTabla(ResultSet unResultset) { rsRegistro=unResultset; try { resmd=rsRegistro.getMetaData(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public int getRowCount() { try { rsRegistro.last(); return rsRegistro.getRow(); } catch (SQLException e) { e.printStackTrace(); return 0; } }
@Override public int getColumnCount() { try { return resmd.getColumnCount(); } catch (SQLException e) { e.printStackTrace(); return 0; } }
@Override public Object getValueAt(int rowIndex, int columnIndex) { try { rsRegistro.absolute(rowIndex+1); return rsRegistro.getObject(columnIndex+1); } catch (SQLException e) { e.printStackTrace(); return null; } } public String getColumnName(int c) { try { return resmd.getColumnName(c+1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } }
|