怎么去除JTable上的CTRL+A热键功能? 做一个SWING程序,界面上用到了JTable,现在客户要求去掉CTRL+A功能,在允许多记录选择的情况下,这个热键组合功能为选中全部记录,虽然我设置只允许选择一行(不允许多行同时选择),但CTRL+A功能变成自动跳转到最后一条记录上去了,郁闷。我的表不需要输入功能的,但用户要选择记录、通过上、下箭头移动记录的,用户不喜欢CTRL+A功能。:( 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 去掉 Ctrl + A 全选import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;public class Table { public static void main(final String[] args) { java.awt.EventQueue.invokeLater(new Runnable(){ public void run(){ DefaultTableModel model = new DefaultTableModel(5,10){ public Object getValueAt(int r,int c){ return Integer.valueOf(r*c); } public boolean isCellEditable(int r,int c){ return false; } }; JTable table = new JTable(model); final InputMap im = new ComponentInputMap(table); final ActionMap am = new ActionMap(); im.put(KeyStroke.getKeyStroke("ctrl a"),"donothing"); am.put("donothing",null); table.setInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW,im); table.setActionMap(am); JFrame frame = new JFrame("Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); }} 感谢楼上提供了很好的思路,不过按你的方法,通过上、下箭头移动记录的功能也没了,不知道有没有办法把原来的CTRL+A的动作直接替换为不做任何事情. 在 ComponentInputMap ActionMap 里添加 处理 UP 和 DOWN。 http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html这是的文章介绍怎么阻止某个热键,不知道为什么我设置了不起作用,我并不想重起炉灶重新实现TABLE自带的全部热键功能,只是想去除某个功能而已。:(Table1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ctrl a"), "doNothing");Table1.getActionMap().put("doNothing", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { } }); 报告大家,上面的代码是可以起作用的,之前可能是我代码没有编译完整所以看不到结果误以为不起作用。再次感谢huntor的思路,偶是JAVA初学者,所以有些问题不知道从哪些方向着手,见谅。 Table1.getInputMap().put(KeyStroke.getKeyStroke("ctrl a"), "doNothing");Table1.getActionMap().put("doNothing", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { } });这样的使用才能起作用,前面给错getInputMap()的参数了,应该不用参数(相当于用WHEN_FOCUSED参数),也可以在actionPerformed方法里实现自己特定的功能。:) final修饰的问题,求精通Java的老师解释一下 线程基础notify()方法 如何監控頁面的狀態 初级菜小鸟的问题.. 学java到了瓶颈了,应该怎么办? 好闷啊!随便聊聊........... 收集:关于JBuilder7实例、教程的电子书或文章! 怎样才能使JTable可以在一行中多行显示单元内容? 我有很多以前发的帖子,没有人回答,我想把它们删除,如何操作? Canvas 中的 paint 不能重画。 请问Timestamp 这个怎么格式化呢? 请问我在网上下的SQL2000怎么才20多M,这和300多M的有什么区别
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;public class Table {
public static void main(final String[] args) {
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
DefaultTableModel model = new DefaultTableModel(5,10){
public Object getValueAt(int r,int c){
return Integer.valueOf(r*c);
}
public boolean isCellEditable(int r,int c){
return false;
}
};
JTable table = new JTable(model);
final InputMap im = new ComponentInputMap(table);
final ActionMap am = new ActionMap();
im.put(KeyStroke.getKeyStroke("ctrl a"),"donothing");
am.put("donothing",null);
table.setInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW,im);
table.setActionMap(am);
JFrame frame = new JFrame("Table");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(table));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Table1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ctrl a"), "doNothing");
Table1.getActionMap().put("doNothing", new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
}
});
Table1.getActionMap().put("doNothing", new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
}
});这样的使用才能起作用,前面给错getInputMap()的参数了,应该不用参数(相当于用WHEN_FOCUSED参数),也可以在actionPerformed方法里实现自己特定的功能。:)