tecla seleccionar que hacer funcione filas fila evento dinamicamente con como boton agregar java swing jtable keylistener key-bindings

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