Java - Como meter un ArrayList a un DefaultTableModel?

 
Vista:
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por Juanillo (18 intervenciones) el 29/03/2015 13:21:27
Buenas jente,haber quien me puede ayudar,tengo esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public ArrayList<ArrayList<Object>> lista2d(String tabla,Connection conec){
        ResultSet rst;
        ResultSet rsc;
        DatabaseMetaData metaDatos = null;
        ArrayList<ArrayList<Object>> tablaArray = new ArrayList<>();
        try {
            metaDatos = conec.getMetaData();
        } catch (SQLException ex) {
            Logger.getLogger(Operaciones.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
 
            rst = metaDatos.getTables(null, null, "%", null);
            //primary key si existe
            if (rst.next()){
                ResultSet rsp = metaDatos.getPrimaryKeys(null, null, tabla);
                if(rsp.next()){
                        System.out.println("Primary Key: "+rsp.getObject(4));
                }
                rsp.close();
            }
            rst.close();
            //columnas y tipos
 
            rsc = metaDatos.getColumns(null, null, tabla, null);
            int filas=0;
            while(rsc.next()){
                tablaArray.add(new ArrayList<Object>());
                tablaArray.get(filas).add(0,rsc.getString(4));
                tablaArray.get(filas).add(1,rsc.getString(6));
                filas++;
            }
            rsc.close();
        } catch (SQLException ex) {
            Logger.getLogger(Operaciones.class.getName()).log(Level.SEVERE, null, ex);
        }
        return tablaArray;
    }
}
Hay alguna manera de meter el valor devuelto al DefaulTableModel sin recorrer el ArrayList?,o tengo que recorrer el ArrayList y añadirlo al DefaultTableModel? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por eyanez (16 intervenciones) el 29/03/2015 13:44:29
Aqui lo tienes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
 
public class TestTableModel extends JFrame implements ActionListener {
	private DefaultTableModel defaultTableModel;
	@Override
	public void actionPerformed(ActionEvent ae) {
		// TODO Auto-generated method stub
		if(ae.getActionCommand().equalsIgnoreCase("AGREGAR")) {
			int c = defaultTableModel.getRowCount() + 1;
			Random random = new Random();
			float v = random.nextFloat() * c;
 
 
			Object row[] = {c, "Producto" + c,  v, ((c % 2) == 0) ? true : false};
			defaultTableModel.addRow(row);
		}
	}
 
 
	public TestTableModel() {
		// TODO Auto-generated constructor stub
		Object cols[] = {"#", "Producto", "Valor", "Activo"};
 
		defaultTableModel = new DefaultTableModel();
		defaultTableModel.setColumnIdentifiers(cols);
 
		JTable jTable = new JTable();
		jTable.setModel(defaultTableModel);
 
		JScrollPane jScrollPane = new JScrollPane(jTable);
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(jScrollPane, BorderLayout.CENTER);
 
		JButton btnButton = new JButton("Agregar");
		btnButton.setActionCommand("AGREGAR");
		btnButton.addActionListener(this);
 
		JPanel panel = new JPanel(new FlowLayout());
		panel.add(btnButton);
 
		getContentPane().add(panel, BorderLayout.SOUTH);
 
		setSize(500, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
 
	}
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TestTableModel();
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por Juanillo (18 intervenciones) el 29/03/2015 20:38:31
Buenas eyanez y gracias,mira llevo muy poco en java(bueno en programacion orientada objetos,vengo de los 90,solo he conocido la programacion lineal y hace 20 años),bueno al caso:
me lo he montado de esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
private void jList_TablasMouseClicked(java.awt.event.MouseEvent evt) {
        String cad="";
        Object fila[]=null;
        String seleccion = this.jList_Tablas.getSelectedValue().toString();
        for(int fs=0;fs<op.lista2d(seleccion,conexion.accederBD()).size();fs++){  //Filas
                for(int col=0;col<op.lista2d(seleccion,conexion.accederBD()).get(fs).size();col++){  //Columnas
                    cad=cad+op.lista2d(seleccion,conexion.accederBD()).get(fs).get(col)+","; //se obtiene el elemento fila,col
                    fila=cad.split(",");
                }
                cad="";
                dfljTable_Campos.addRow(fila);
        }
    }

me funciona,pero la idea era el meter el ArrayList directamente al DefaultTableModel,sin tener que hacer bucles ni nada parecido,un saludo y si ves algo que se pueda corregir o se puede hacer de otra manera,no me viene mal que me corrigan,la mente esta para abrirla no cerrarla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por eyanez (16 intervenciones) el 30/03/2015 14:42:43
Ahora si te entendi, es super sencillo sabes

En cambio de usar DefaultTableModel haz tu propia clase que extienda de AbstractTableModel y hay puedes colocar un metodo sin problemas para pasar un ArrayList Completo en el constructor si quieres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por Juanillo (18 intervenciones) el 31/03/2015 21:10:23
Buenas de nuevo,veras eyanez ,investigando por la red he logrado crearme una clase como me aconsejaste esta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package bbdd;
 
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
 
/**
 *
 * @author Juan
 */
public class MiModeloTabla extends  AbstractTableModel {
 
    final String[] nombreColumnas;
    private  ArrayList<ArrayList<Object>> data;
 
    public MiModeloTabla() {
        super();
        this.data = null;
        this.nombreColumnas = new String[]{"Campo", "Tipo"};
 
    }
 
    public void addDatos (ArrayList<ArrayList<Object>> datos){
         this.data = datos;
    }
 
    @Override
    public int getColumnCount() {
         return nombreColumnas.length;
    }
 
    @Override
    public int getRowCount() {
        return data.size();
    }
    //retornamos el elemento indicado
    @Override
    public String getColumnName(int col) {
        return nombreColumnas[col];
    }
     //y lo mismo para las celdas
    @Override
    public Object getValueAt(int row, int col) {
        return data.get(row).get(col);
    }
     /*
    * Este metodo sirve para determinar el editor predeterminado
    * para cada columna de celdas
    */
    @Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
     /*
    * No tienes que implementar este mÈtodo a menos que
    * las celdas de tu tabla sean Editables
    */
    @Override
    public boolean isCellEditable(int row, int col) {
        return true;
    }
     /*
    * No tienes que implementar este mÈtodo a menos que
    * los datos de tu tabla cambien
    */
    @Override
    public void setValueAt(Object value, int row, int col) {
        data.get(row).add(col,value);
        this.fireTableCellUpdated(row, col);
    }
}
Ahora en la clase frame,hago:
1
private final MiModeloTabla modeloMioTabla;
1
2
3
4
public VentanaMain() {
 
        initComponents();
        this.modeloMioTabla = new MiModeloTabla();
Mas codigo..... }
1
private void jList_TablasMouseClicked(java.awt.event.MouseEvent evt) {
1
2
//  jTable_Campos.setModel(modeloMioTabla);
            modeloMioTabla.addDatos(op.camposTabla(seleccion, conexion.accederBD()));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por Juanillo (18 intervenciones) el 31/03/2015 22:32:38
Rectifico eyanez ,de la primera forma me da el error,ah..falta una linea de codigo en el constructor del jframe:
jTable_Campos.setModel(modeloMioTabla);
y de la segunda que parecia funcionar tampoco,no da error pero hace cosas raras,
un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por eyanez (16 intervenciones) el 01/04/2015 11:46:34
Aqui tienes el ejemplo funcional

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package test_lwp;
 
 
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
 
public class ExampleJTable extends JFrame {
	private JTable table;
	private MiModeloTabla modelo;
 
	public ExampleJTable() {
		// TODO Auto-generated constructor stub
 
		table = new JTable();
		JScrollPane scroll = new JScrollPane(table);
 
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(scroll, BorderLayout.CENTER);
 
		JButton btn = new JButton("Cargar");
		btn.addActionListener(new ActionListener() {
 
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
 
				//Aqui Carga los datos
				ExampleJTable.MiModeloDatos datos;
				ArrayList<MiModeloDatos> data = new ArrayList<ExampleJTable.MiModeloDatos>();
 
				datos = new MiModeloDatos();
				datos.campo = "Campo1";
				datos.tipo = "Tipo1";
				data.add(datos);
 
				datos = new MiModeloDatos();
				datos.campo = "Campo2";
				datos.tipo = "Tipo2";
				data.add(datos);
 
				datos = new MiModeloDatos();
				datos.campo = "Campo3";
				datos.tipo = "Tipo3";
				data.add(datos);
 
 
				modelo = new MiModeloTabla(data);
				table.setModel(modelo);
 
 
			}
		});
		JPanel panel = new JPanel(new FlowLayout());
		panel.add(btn);
		getContentPane().add(panel, BorderLayout.SOUTH);
 
		setSize(400, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Example");
		setVisible(true);
	}
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ExampleJTable();
 
	}
 
 
 
 
 
 
    class MiModeloDatos {
    	String campo, tipo;
    }
 
	/**
	 *
	 * @author Juan
	 */
	class MiModeloTabla extends  AbstractTableModel {
 
	final Class tiposColumnas[] = {String.class, String.class};
    final String nombreColumnas[] = {"Campo", "Tipo"};
    private  ArrayList<ExampleJTable.MiModeloDatos> data;
 
    public MiModeloTabla(ArrayList<ExampleJTable.MiModeloDatos> data) {
        this.data = data;
 
    }
 
 
    @Override
    public int getColumnCount() {
         return nombreColumnas.length;
    }
 
    @Override
    public int getRowCount() {
        return data.size();
    }
    //retornamos el elemento indicado
    @Override
    public String getColumnName(int col) {
        return nombreColumnas[col];
    }
     //y lo mismo para las celdas
    @Override
    public Object getValueAt(int row, int col) {
    	//System.out.println("Row = " + row + " Col = " + col);
 
    	ExampleJTable.MiModeloDatos datos = (ExampleJTable.MiModeloDatos) data.get(row);
 
    	switch(col) {
    		case 0 :
    			return datos.campo;
 
    		case 1 :
    			return datos.tipo;
 
    		default :
    			return "";
    	}
    }
     /*
    * Este metodo sirve para determinar el editor predeterminado
    * para cada columna de celdas
    */
    @Override
    public Class getColumnClass(int c) {
        return tiposColumnas[c];
    }
     /*
    * No tienes que implementar este mÈtodo a menos que
    * las celdas de tu tabla sean Editables
    */
    @Override
    public boolean isCellEditable(int row, int col) {
        return true;
    }
     /*
    * No tienes que implementar este mÈtodo a menos que
    * los datos de tu tabla cambien
    */
    @Override
    public void setValueAt(Object value, int row, int col) {
    	ExampleJTable.MiModeloDatos datos = (ExampleJTable.MiModeloDatos) data.get(row);
    	switch(col) {
		case 0 :
			datos.campo = value.toString();
			this.fireTableCellUpdated(row, col);
			break;
 
		case 1 :
			datos.tipo = value.toString();
			this.fireTableCellUpdated(row, col);
			break;
 
	}
    }
}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Como meter un ArrayList a un DefaultTableModel?

Publicado por Juanillo (18 intervenciones) el 04/04/2015 13:33:17
Gracias eyanez ,asi me a quedado el codigo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void jList_TablasMouseClicked(java.awt.event.MouseEvent evt) {
 
        try {
            String seleccion = this.jList_Tablas.getSelectedValue().toString();
            MiModeloDatos datos;
            ArrayList<MiModeloDatos> data = new ArrayList<>();
            ArrayList<ArrayList<Object>> datosTmp=(ArrayList<ArrayList<Object>>) this.op.camposTabla(seleccion, this.conexion.accederBD()).clone();
            Iterator it=datosTmp.iterator();
            int fila=0;
            while (it.hasNext()){
                datos = new MiModeloDatos();
                datos.campo =(String) datosTmp.get(fila).get(0);
                datos.tipo = (String) datosTmp.get(fila).get(1);
                data.add(datos);
                fila++;
                it.next();
            }
            this.modelo = new MiModeloTabla(data);
	    this.jTable_Campos.setModel(this.modelo);
        } catch (java.lang.NullPointerException Exception ) {
            JOptionPane.showMessageDialog(this,"Lista vacia","tablas",JOptionPane.ERROR_MESSAGE);
        }
    }
Ahora en el siguiente jTable que tengo que construir,se complica mas la cosa,tiene que ser editable y con un par de columnas mas extras con botones con iconos,una para guardar y otra para eliminar,Ahora investigar....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar