una - Java Obteniendo valor de JTable(por fila)
getvalueat para que sirve (5)
Me gustaría obtener el valor del Jtable, y lo probé usando el getvalueat. Sin embargo, cada vez que trato de obtener el valor de JTable solo obtengo el valor de la primera columna de la fila seleccionada, necesito obtener todo el valor del Jtable que seleccioné ¿Puedes ayudarme con esto?
here is my code:
class GetTableValue implements ActionListener{
public void actionPerformed(ActionEvent e){
AbstractButton button = (AbstractButton)e.getSource();
if(e.getActionCommand().equals(button.getActionCommand)){
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
Object data = (Object)table.getValueAt(row, col);
JOptionPane.showMessageDialog(null, data);
}
}
}
Este es mi evento de acción donde el valor de la tabla seleccionada se muestra en JOptionPane. Desafortunadamente, solo muestra un valor (que es el que ya seleccionó) y no toda la fila.
Este código es para mi Jbutton para llamar al evento de acción (ya excluí mi código de JTable ya que recupera el valor Jtable de mi base de datos)
ActionListener tableAction = new GetTableValue();
buttonEdit = new JButton("EDIT");
buttonEdit.addActionListener(tableAction);
el código es simple y simple, también busco al Sr. G (google) sobre un buen tutorial sobre ir a la fila, desafortunadamente no hay un buen tutorial para recuperar el valor Jtable (por fila).
Puede probar el siguiente código para obtener el valor de la fila seleccionada:
int selectedRow = jTableName.getSelectedRow();
selectedRow = jTableName.convertRowIndexToModel(selectedRow);
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0);
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1);
Este enlace puede serle útil http://www.roseindia.net/java/example/java/swing/GetCellValues.shtml
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {
int selectedRow;
ListSelectionModel rowSM = jTable1.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent e)
{
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
selectedRow = lsm.getMinSelectionIndex();
int numCols = jTable1.getColumnCount();
model = (DefaultTableModel) jTable1.getModel();
System.out.print(" /n row " + selectedRow + ":");
for (int j = 0; j < numCols; j++)
{
System.out.print(" " + model.getValueAt(selectedRow, j));
}
}
});
}
Usando esto puedes obtener el valor de toda la fila donde haces clic en una fila en particular.
getValueAt
le devolverá el valor de la celda (en fila / col). A menos que su modelo de tabla lo soporte, no hay una manera conveniente (más allá de lo que está haciendo) de obtener toda la fila en una única solicitud.
Además, recuerde que si la tabla está ordenada o filtrada, los índices del modelo no coincidirán con la vista, debe convertirlos primero, usando convertRowIndexToModel
y convertColumnIndexToModel
ACTUALIZAR
La única forma de getRow
es si el modelo de tabla que está utilizando tiene un getRow
(o equivalente). Sin saber cómo está almacenando los datos en el modelo de tabla, es casi imposible dar una respuesta precisa, pero una idea general sería ...
public class MyAwesomeTableModel extends AbstractTableModel {
// All the usual stuff...
public MyRowData getRowAt(int index) { ... }
}
Ahora, MyRowData
es la implementación de los datos de la tabla que has creado. Podría ser (preferiblemente) un único Object
o, en el caso de DefaultTableModel
una matriz de objetos.
class GetTableValue implements ActionListener{
public void actionPerformed(ActionEvent e){
AbstractButton button = (AbstractButton)e.getSource();
if(e.getActionCommand().equals(button.getActionCommand)){
int row = table.convertRowIndexToModel(table.getSelectedRow());
MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel();
MyRowData data = model.getRowAt(row);
JOptionPane.showMessageDialog(null, data);
}
}
}
Todo depende de cómo haya implementado su TableModel
y cómo haya implementado sus datos de fila, pero esa es la opinión general
Si desea todos los valores de la fila seleccionada, intente con este código .
int row = jTable1.getSelectedRow();
int column = jTable1.getColumnCount();
for(int i = 0; i < column; i++) {
System.out.println(jTable1.getValueAt(row, i));
}
Obtiene todos los valores para la fila seleccionada, sin importar cuántas columnas haya en jtable
Si quiere todos los valores de jtable, intente:
int row = jTable1.getRowCount();
int column = jTable1.getColumnCount();
for (int j = 0; j < row; j++) {
for (int i = 0; i < column; i++) {
System.out.println(jTable1.getValueAt(j, i));
}
}
Sí, puede usar Object[]
para almacenar los valores. Por ejemplo:
Object[] val = new Object[column];
for (int k = 0; k < val.length - 1; k++) {
for (int j = 0; j < row; j++) {
for (int i = 0; i < column; i++) {
val[k] = jTable1.getValueAt(j, i);
System.out.println(val[k]);
}
}
}