在jTable上使用Enter键Act Like Tab键 [英] Use Enter Key Act Like Tab Key on jTable
问题描述
我在我的项目中停留了2天我无法实现如何使输入键像 TAB KEY 那样尝试关键监听器但是ENTER键有一个JTable的默认功能,所以它不工作它继续向下移动。我谷歌发现我需要使用密钥绑定,但我无法实现它。
I'm stuck from 2 days in my project i cant implement how to make the ENTER KEY act like TAB KEY i tried key listener but the ENTER KEY have a default feature for JTable so it's not working it's keep moving down. I google it discovered that i need to use key binding but i'm unable to implement it.
任何人都可以在JTable上给我一个完整的编码示例???请你帮忙。
Can anyone give me a full coded example of this on a JTable ??? Please need you help.
提前致谢
推荐答案
基本扭曲将是使用键绑定API,这将允许您在大多数情况下覆盖许多组件上的默认行为键。
The basic twist would be to use the key bindings API, which will allow you to override, in most cases, the default behaviour keys on many components.
此示例基本上适用相同的对 Enter 和 Tab 键的命名操作,这样可以通过使用单个 Action
。
This example basically applies the same named action to the Enter and Tab keys, this makes it easy to modify their behaviour through the use of a single 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 的功能
The functionality of Tab is controlled by changing the default focus behaviour through the focus manager as I recall
这篇关于在jTable上使用Enter键Act Like Tab键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!