在jTable上使用Enter键Act Like Tab键

我在我的项目中停留了2天我无法实现如何让ENTER KEYTAB KEY一样我试过键监听器但是ENTER KEY有一个JTable的默认function所以它不能正常工作它继续向下移动。 我谷歌它发现我需要使用键绑定,但我无法实现它。

任何人都可以在JTable上给我一个完整的编码示例??? 请你帮忙。

提前致谢

基本的改变是使用键绑定API,这将允许您在大多数情况下覆盖许多组件上的默认行为键。

此示例基本上将相同的命名操作应用于EnterTab键,这样可以通过使用单个Action轻松修改其行为。

 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableModel; public class Test101 { public static void main(String[] args) { new Test101(); } public Test101() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JTable table = new JTable(); InputMap im = table.getInputMap(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Action.NextCell"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), "Action.NextCell"); ActionMap am = table.getActionMap(); am.put("Action.NextCell", new NextCellActioin(table)); DefaultTableModel model = new DefaultTableModel(10, 10); table.setModel(model); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class NextCellActioin extends AbstractAction { private JTable table; public NextCellActioin(JTable table) { this.table = table; } @Override public void actionPerformed(ActionEvent e) { int col = table.getSelectedColumn(); int row = table.getSelectedRow(); int colCount = table.getColumnCount(); int rowCount = table.getRowCount(); col++; if (col >= colCount) { col = 0; row++; } if (row >= rowCount) { row = 0; } table.getSelectionModel().setSelectionInterval(row, row); table.getColumnModel().getSelectionModel().setSelectionInterval(col, col); } } } 

我记得,通过焦点管理器更改默认焦点行为来控制Tab的function

  KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0); KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); im.put(enter, im.get(tab)); 

您可以在动作映射中指定行为并输入JTable输入映射:

 InputMap im = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); Object actionKey = new Object(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), actionKey); table.getActionMap().put(actionKey, new AbstractAction() { @Override public void actionPerformed(ActionEvent event) { // Do something for ENTER } }); 

您谈到的默认行为存在于操作映射中,默认情况下已初始化。