做了修改。
期间找了好多方式,拼来凑去,就成了这样。感觉挺受用。代码如下:
public class TableKeyAdapter extends KeyAdapter {
JTable table;
Component dept;
public focus f = new focus();
class focus implements FocusListener {
public void focusLost(FocusEvent e) {
if(dept != null) {
dept.requestFocus();
}
}
public void focusGained(FocusEvent e) {}
}
public TableKeyAdapter(JTable pTable,Component x) {
table=pTable;
dept=x;
}
public void keyPressed(KeyEvent e) {
if (e.isAltDown() || e.isControlDown()) // ALT,CONTROL
return;
if (e.getKeyCode() == 0 // FN
|| e.getKeyCode() == 9 // TAB
|| e.getKeyCode() == 27 // ESC
|| (e.getKeyCode() >= 112 && e.getKeyCode() <= 123) // F1-F12
|| (e.getKeyCode() >= 16 && e.getKeyCode() <= 18) // ctrl,alt,shift
|| (e.getKeyCode() >= 33 && e.getKeyCode() <= 36) // home,end,PgUp,PgDn
|| (e.getKeyCode() >= 37 && e.getKeyCode() <= 40) // up,down,left,right
|| e.getKeyCode() == 155 // Insert
|| e.getKeyCode() == 9 // Backspace
|| e.getKeyCode() == 145 // Numlk ScrLk
|| e.getKeyCode() == 19 // Pause
|| e.getKeyCode() == 20 // Caps Lock
|| e.getKeyCode() == 29 // language
|| e.getKeyCode() == 10) // Enter
return;
if (!table.isEditing()) {
table.editCellAt(table.getSelectedRow(), table.getSelectedColumn());
Component editorComp = table.getEditorComponent();
if (editorComp instanceof JTextField) {
((JTextField) editorComp).setText(null);
editorComp.requestFocus();
}
editorComp.addFocusListener(f);
}
}
}
调用方式:
table.addKeyListener(new CTableKeyAdapter(JTable,
JTextField
));