Java 填充JTable

Java 填充JTable,java,swing,lambda,jtable,Java,Swing,Lambda,Jtable,我有一个JTable,我想知道是否有更好的方法来填充它,下面是我的代码: //Metodo para llenar un jtable con datos de la base public static DefaultTableModel llenarTabla(JTable tabla,String Consulta,Object []datos){ try (Connection conexion = pool.getConnection(clsConexion.espera)){

我有一个
JTable
,我想知道是否有更好的方法来填充它,下面是我的代码:

//Metodo para llenar un jtable con datos de la base
public static DefaultTableModel llenarTabla(JTable tabla,String Consulta,Object []datos){
    try (Connection conexion = pool.getConnection(clsConexion.espera)){//Tomamos una de las conexiones que hay en el pool
        resultado = null;//Inicializamos la vareiable resultado a nula
        modelo=null;
        if(conexion!=null){//Si pudimos obtener una de las conexiones ejecutamos proceso
            resultado = Consulta(Consulta, datos);//Hacemos la consulta de los datos de la base y los alojamos en un resultset
            metaData = resultado.getMetaData();//Obtenemos los valores de la cantidad de columnas y filas que hay
            columnas = metaData.getColumnCount();//Contamos las columnas
            // Datos de las casillas
           ArrayList<Object[]> informacion =new ArrayList<>();//Creamos el vectoe donde donde alojaremos la informacion
            while (resultado.next()) {//Recorremos el resultset para tomar los valores
                Object[] momento=new Object[columnas];//Creamos vector para guardar la informacion mientras se recorre
                for (int i = 1; i <= columnas; i++) {//Tomamos los valores que esten en la fila - i - y en la columna en la que estamos del ciclo while
                    momento[i-1] = resultado.getObject(i);  //Anadimos los datos al vector
                }
                informacion.add(momento);//Anadimos el los datos de vector a informacion cuando terminamos con una fila
            } modelo=(DefaultTableModel)tabla.getModel();//Tomamos el modelo de la tabla en la que deseamos mostrar los datos
            for (int i = 0; i <informacion.size(); i++) {//Recorremos la informacion
                modelo.addRow(informacion.get(i));//Anadimos la informacion que este en la posicion - i - del vector
            }
            return modelo;
        }else{WebOptionPane.showMessageDialog(null, "Error Nivel 2:\n Metodo: clsConexion/llenarTabla.\nError intentando conectar mediate una conexion del pool.","Conectando con la base de datos.",WebOptionPane.ERROR_MESSAGE);return null;}
    } catch(SQLException ex){WebOptionPane.showMessageDialog(null, "Error Nivel 2.2:\n"+ex+"\n Metodo: clsConexion/llenarTabla.\nError Intentando crear modelo para la tabla","Informacion de la base de datos.",WebOptionPane.ERROR_MESSAGE);return null;}
}
//Data Manipulation Language (DML) & (DCL)-> SELECT, CALL, LOCK TABLE, MERGE
public static ResultSet Consulta(String consulta, Object []datos){//Metodo para realizar una consulta a la base, capturamos la consulta y los datos
    try (Connection conexion = pool.getConnection(clsConexion.espera)){//Intentamos darle valor a la conexion
        resultado = null;//Inicializamos la variable
        sentenciaPreparada = null;
        if(conexion!=null){//Verificamos si la conexion tiene valor
            sentenciaPreparada = conexion.prepareStatement(consulta);//Preparamos la sentencia
            if(datos.length >=1 && datos[0]!="SELECTSINPARAMETROS"){//Verificamos si en la consulta se cargaran parametros
                for(int posicion =1; posicion<datos.length;posicion++){//Cliclo para a;adir los datos a la consulta que esta alojada en la sentencia
                    sentenciaPreparada.setObject(posicion, datos[posicion-1]);//A;adimos el dato en la posicion que le indicamos y el dato
                } 
            }resultado = sentenciaPreparada.executeQuery();//Ejecutamos la sentencia
        }else{WebOptionPane.showMessageDialog(null, "Error Nivel 2:\n Metodo: clsConexion/Consulta.\nError intentando conectar mediate una conexion del pool.","Conectando con la base de datos.",WebOptionPane.ERROR_MESSAGE);}
    } catch (SQLException ex) {WebOptionPane.showMessageDialog(null, "Error Nivel 2.1:\n"+ex+"\n Metodo: clsConexion/Consulta.\nError Intentando hacer una conulta DML|DCL a la base.","Consulta a la base de datos.",WebOptionPane.ERROR_MESSAGE);}
    finally{
        try {
            sentenciaPreparada.close();//Cerramos la sentencia
        }catch (SQLException ex) {WebOptionPane.showMessageDialog(null, "Error Nivel 2.1:\n"+ex+"\n Metodo: clsConexion/Consulta DML|DCL.\nError Intentando cerrar sentencia.","Consulta a la base de datos.",WebOptionPane.ERROR_MESSAGE);}
    }return resultado;
}
<代码>//我要去基地 公共静态DefaultTableModel Llenatalla(JTable tabla、字符串Consulta、对象[]datos){ 试试(Connection conexion=pool.getConnection(clsConexion.espera)){//Tomamos una de las conexion que hay en el pool resultado=null;//Inicializamos la vareiable resultado a nula modelo=null; 如果(conexion!=null){//Si pudimos obtener una de las conexiones ejecutamos proceso resultado=Consulta(Consulta,datos);//Hacemos la Consulta de los datos de la base y los alojamos en un resultset metaData=resultado.getMetaData();///Obtenemos los valores de la cantidad de columnas y filas que hay columnas=metaData.getColumnCount();//Contamos las columnas //达托斯德拉斯卡西利亚斯酒店 ArrayList informacion=new ArrayList();//Creamos el vectoe donde donde alojaremos la informacion 而(resultado.next()){//Recorremos el resultset para tomar los valores Object[]momento=new Object[columnas];//Creamos vector para guardar la informacion mientras se recorre 对于(int i=1;i=1&&datos[0]!=“SELECTSINPARAMETROS”){//Verificamos si en la consulta se cargaran parametros 对于(int posicion=1;posicion 在填充jtable时,我应该使用什么,读取数据时使用向量来存储数据,还是使用arraylist

DefaultTableModel支持向量,而不是ArrayList


如果要使用ArrayList,则需要使用自定义的TableModel。

“我有点新,所以请不要将此问题偏离主题,我只想学习。”
--可能会因为内容过于宽泛而关闭,因为到目前为止,你发布的是一堆代码和一个模糊的愿望,希望做得更好并加以批评。什么让你特别困惑?你到底在问什么?@hover craftfullofeels我编辑了这个问题,所以,你能回答它吗
Hacemos la consulta de los datos de la base y los alojamos en un resultset
Hmm..西班牙语的注释在英语论坛上没有多大帮助。@AndrewThompson抱歉,我只是复制了代码,但你无论如何我认为你能理解代码。在我的编辑器中编译代码之前,我不会仔细查看代码。即使代码可以理解,注释也会浪费带宽。但是dif是什么它们之间的引用?哪一个更有优势,我已经读到向量内容是线程安全的,但这意味着什么?向量是同步的,这会增加额外的开销。创建新应用程序的人通常会使用ArrayList。对TableModel的所有更新都应该在事件调度线程(EDT)上完成这是线程安全的,因此您可以使用ArrayList或Vector。您可以选择使用现有类,实际上这不会是性能问题,或者您必须创建自己的使用ArrayList的TableModel。我将首先使用默认类来学习和理解如何使用JTable。一旦您了解了它的优点然后,您可以创建自定义模型。