una - setvalueat jtable java
Buscar columna#por nombre de columna o encabezado-JTable (5)
Quiero implementar una clase de validación general para mis jtables en diferentes formas para verificar la columna qty, ya que la columna qty No en diferentes tablas de diferentes formas es diferente. Para esto quiero obtener el valor de la columna por columna Nombre similarmente en C # o VB.
Mi requisito es el siguiente.
int qty=jtable.getValueAt(rowNo,"columnName");
Ahora estoy usando
int qty=jtable.getValueAt(rowNo,colNo);
¿Hay alguna forma de encontrar la columna # por columna Nombre o Cabecera de JTable?
Deberías intentar usar esto:
int qty = jtable.getValueAt( rowNo, jtable.getColumn("columnName").getModelIndex() );
Estaba enfrentando el mismo problema. Esta fue mi implementación:
int nameColNo = getColumnIndex(table, "Name");
String name = (String)table.getValueAt(rowNo, nameColNo);
private int getColumnIndex (JTable table, String header) {
for (int i=0; i < table.getColumnCount(); i++) {
if (table.getColumnName(i).equals(header)) return i;
}
return -1;
}
Por supuesto, si fuiste tú quien creó los encabezados de tabla, se espera que nunca regrese -1
, de lo contrario podrías tratarlo como corresponda.
Hola, esta es una respuesta simple a tu pregunta:
int qty=jtable.getValueAt(rowNo,jtable.convertColumnIndexToView(jtable.getColumn("columnName").getModelIndex()));
Probablemente deberías estar preguntando a TableModel
, en lugar de a JTable
, que puede tener sus columnas reorganizadas. Un enfoque sería permitir que su TableModel
implemente una interfaz adecuada, por ejemplo,
public interface Quantifiable {
public int getQuantity(int row);
}
Adición: por favor, díganos cómo implementar esta interfaz .
Mucho depende de la relación entre las clases existentes de TableModel
. Digamos que todos tienen una cantidad numérica en alguna columna. Si quantityCol
es el índice de modelo de una columna que tiene el tipo Number
, podría hacer algo como esto:
public class QuantifiableTableModel
extends AbstractTableModel implements Quantifiable {
private int quantityCol;
public QuantifiableTableModel(int quantityCol) {
this.quantityCol = quantityCol;
}
@Override
public int getQuantity(int row) {
Number n = (Number) getValueAt(row, quantityCol);
return n.intValue();
}
...
}
Realicé mi tarea usando el operador ternario en mi código
int colNo = ((tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Qty"))
|| (tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Weight"))
|| (tbl.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Wt"))
? tcl.getColumn() : -1);
¡El código completo de mi oyente de células de tabla general usando el editor de células de tabla de Bob Camick) !
final JTable table = (JTable) jComp.get(a);
tbl.getTableHeader().setReorderingAllowed(false);
Action actionProd = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
Utility util = new Utility("GoldNew");
TableCellListener tcl = (TableCellListener) e.getSource();
System.out.println("Row : " + tcl.getRow());
System.out.println("Column: " + tcl.getColumn());
System.out.println("Old : " + tcl.getOldValue());
System.out.println("New : " + tcl.getNewValue());
int colNo = ((table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Qty"))
|| (table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Weight"))
|| (table.getModel().getColumnName(tcl.getColumn()).equalsIgnoreCase("Wt"))
? tcl.getColumn() : -1);
if (tcl.getColumn() == colNo) {
int wt = 0;
Object qtyO = tcl.getNewValue();
try {
qtyO = tcl.getNewValue();
if (qtyO != null) {
wt = Integer.parseInt(qtyO.toString());
}
if (wt < 0) {
table.getModel().setValueAt(tcl.getOldValue(), tcl.getRow(), colNo);
}
} catch (Exception ex) {
util.ShowMessage("Please enter the Numbers only", "Error!");
table.getModel().setValueAt(tcl.getOldValue(), tcl.getRow(), colNo);
ex.printStackTrace();
}
}
}
};
TableCellListener tclProd = new TableCellListener(table, actionProd);