varias valor una seleccionar seleccionada obtener mostrar los llenar filas fila desde datos con como codigo celda agregar java swing user-interface jtable tablemodel

java - valor - Cómo establecer un objeto personalizado en una fila JTable



seleccionar una fila de un jtable desde codigo (1)

Debo decir esto primero, esto NO es sobre renderizar una celda de tabla.

Aquí está el modelo de tabla que estoy construyendo usando una matriz 2D basada en un objeto de User en mi base de datos.

List<User> userList = userManagerService.getAllUsers(); /* String[] col_user = {"Username", "Name", "Phone", .... } */ String[][] data = new String[userList.size()][col_user.length]; int i = 0; for (User user : userList) { String[] userdata = new String[col_user.length]; userdata[0] = user.getUserUsername(); userdata[1] = user.getUserName(); userdata[2] = user.getUserPhone(); userdata[3] = user.getUserNic(); userdata[4] = user.getUserAddress(); userdata[5] = user.getUserEmail(); data[i++] = userdata; } VstTableItemModel tiModel = new VstTableItemModel(data, col_user); dataTable.setModel(tiModel);

Mi problema es cómo puedo recuperar un objeto User utilizando la fila seleccionada en la Tabla. Tenga en cuenta que no puedo crear un nuevo objeto User y rellenarlo con los datos de la fila. Debo obtener el objeto User consultado (objetos en userList ). Entonces, ¿hay alguna manera de establecer un Objeto con una fila de tabla?

Aquí está mi clase VstTableItemModel .

public class VstTableItemModel extends AbstractTableModel { ArrayList<Object[]> data; String[] header; public VstTableItemModel(Object[][] obj, String[] header) { this.header = header; data = new ArrayList<Object[]>(); for (int i = 0; i < obj.length; ++i) { data.add(obj[i]); } } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return header.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data.get(rowIndex)[columnIndex]; } @Override public String getColumnName(int index) { return header[index]; } }


En lugar de dividir el objeto User antes de crear el modelo, agréguelo directamente al modelo y permita que el modelo haga el trabajo por usted ...

Por ejemplo

public class VstTableItemModel extends AbstractTableModel { private List<User> users; public VstTableItemModel(List<User> users) { this.users = new ArrayList<User>(users); } @Override public int getRowCount() { return users.size(); } @Override public int getColumnCount() { return 6; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Object value = "??"; User user = users.get(rowIndex); switch (columnIndex) { case 0: value = user.getUserUsername(); break; case 1: value = user.getUserName(); break; case 2: value = user.getUserPhone(); break; case 3: value = user.getUserNic(); break; case 4: value = user.getUserAddress(); break; case 5: value = user.getUserEmail(); break; } return value; } @Override public Class<?> getColumnClass(int columnIndex) { return // Return the class that best represents the column... } /* Override this if you want the values to be editable... @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { //.... } */ /** * This will return the user at the specified row... * @param row * @return */ public User getUserAt(int row) { return users.get(row); } }

De esta manera, deberías ser capaz de hacer algo como ...

List<User> userList = userManagerService.getAllUsers(); VstTableItemModel tiModel = new VstTableItemModel(userList);

Ahora cuando necesitas ... puedes agarrar al usuario que está representando en una fila específica ...

User user = tiModel.getUserAt(rowIndex);