java - que - evento al seleccionar fila jtable
Deshabilitar la tecla Intro para mover una fila hacia abajo en JTable (2)
+1 a la respuesta de @ Robin
Agregando a mi comentario ...
Swing usa KeyBinding
s simplemente reemplaza la funcionalidad existente agregando un nuevo KeyBinding
a JTable
(la belleza sucede debido a JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
):
private void createKeybindings(JTable table) {
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
table.getActionMap().put("Enter", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
//do something on JTable enter pressed
}
});
}
simplemente llame a este método y pase la instancia de JTable
para anular la funcionalidad estándar de JTable
ENTER
Necesito anular la funcionalidad de introducir la clave en una JTable. En la actualidad, el comportamiento predeterminado es mover la fila de selección hacia abajo una fila cuando el usuario presiona la tecla ''Intro''. Quiero desactivar esto y hacer que haga algo diferente en función de su selección. El problema es que parece moverse hacia abajo antes de entrar en mi keylistener, que toma la selección de fila; por lo tanto, abre otra ventana con la fila incorrecta seleccionada.
Este es mi código hasta ahora ...
public class MyJTable extends JTable {
public MyJTable(){
setRowSelectionAllowed(true);
addListeners()
}
public void addListeners(){
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
openChannel();
}
}
});
}
public void openChannel(){
for (int selectedRow : getSelectedRows()){
//Code to open channel based on row selected
}
}
}
Esto se implementa utilizando enlaces de teclas, que se prefiere a los oyentes clave. Le sugiero encarecidamente que haga lo mismo: reemplace su oyente clave por un enlace de clave.
La solución es reemplazar la entrada en el Mapa de entrada para apuntar a su propia Acción (que inserta en el mapa de acción), o simplemente para reemplazar la entrada correspondiente en el mapa de acción.
El tutorial de enlaces de teclas contiene más información