Bien de nuevo yo con los JTables previamente [?] JTable Seleccion de Filas Mediante Codigo. (Solucionado) (http://foro.elhacker.net/java/jtable_seleccion_de_filas_mediante_codigo_solucionado-t246609.0.html), ahora tengo un error al momento de tratar de procesar la linea seleccionada.
private void jtMouseClicked(java.awt.event.MouseEvent evt) {
this.Actualizar_Formulario();
}
private void jtKeyPressed(java.awt.event.KeyEvent evt) {
this.Actualizar_Formulario();
}
private void Actualizar_Formulario() {
int i = jt.getSelectedRow();
System.out.println("Linea: " + i);
}
Con el mouse todo va bien Selecciono la primera linea y me devuelve 0, la tercera me devuelve 2 etc.
pero con las flchas del teclado es diferente, estoy en la tercera fila y con la UP, me dice:
CitarLinea: 2
Y la linea seleccionada es la Segunda (deberia de decir 1), le doy nuevamente UP, ahora:
(http://i.elhacker.net/i?i=5lsoP-QmVjW2pOZLivLLHWVo) (http://i.elhacker.net/d?i=5lsoP-QmVjW2pOZLivLLHWVo)
CitarLinea: 1
Y la linea seleccionada es la Primera (deberia de decir 0), le doy nuevamente UP
CitarLinea: 0
Ahora eso si que desconseraria, ya que dependiendo de la fila en la tabla que se seleccione va a procesar la entrada, si es con el mouse no hay problema, pero si es con el teclado si y no deberia.
¿Que podria estar pasando?
Voy a agregar un filtro que verifique si es el campo ya lo habia validado pero eso es para despues de que se seleccione directamente la fila a procesar.
Creo que la cosa esta con el evento del key pero no tengo mucha experiencia en ello.
Saludos y Gracias de Antemano.
El problema está en el evento que usas, usa KeyReleased :P Como veo que usas NetBeans, aquí la prueba xD
import javax.swing.table.*;
public class Main extends javax.swing.JFrame
{
private DefaultTableModel datos = new DefaultTableModel();
public static void main(String args[]) { new Main().setVisible(true); }
public Main()
{
initComponents();
datos.addColumn("Nombre del plan");
datos.addColumn("Asignado");
datos.addRow(new Object[]{"A1", "xD"});
datos.addRow(new Object[]{"A2", "o.0"});
datos.addRow(new Object[]{"A3", ":P"});
jt.setModel(datos);
}
private void Actualizar_Formulario() {
int i = jt.getSelectedRow();
System.out.println("Linea: " + i);
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jt = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jt.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jt.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jtKeyPressed(evt);
}
public void keyReleased(java.awt.event.KeyEvent evt) {
jtKeyReleased(evt);
}
});
jScrollPane1.setViewportView(jt);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(13, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(13, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jtKeyReleased(java.awt.event.KeyEvent evt) {
Actualizar_Formulario();
}
private void jtKeyPressed(java.awt.event.KeyEvent evt) {
//Actualizar_Formulario(); <-------- MAAAAL!!!
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jt;
// End of variables declaration
}
Salu2, E0N
A valla era el evento, me imaginaba que era por ahi pero no sabia que otros eventos utilizar.
Muchas Gracias E0N
Saludos.
De nada. Si usas NetBeans haces click derecho sobre el JTable Events -> Key y ahí tienes todos los eventos disponibles ;)
Salu2, E0N