/*
当按回车键时,表格Cell的焦点将按从左到右排列。

下面这两句话很重要
dataTable.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"moveForward");
        dataTable.getActionMap().put("moveForward",moveForward);
*/

Action moveForward = new AbstractAction() 
{
public void actionPerformed(ActionEvent e) 
{
int rowCount=dataTable.getRowCount();
int colCount=dataTable.getColumnCount();

int selRow=dataTable.getSelectedRow();
                int selCol=dataTable.getSelectedColumn();
                if(selCol==colCount-1)
                {
                 if(selRow==rowCount-1)
                 {
                 selCol=-1;
                        selRow=0;
                 }
                 else
                 {
                 selCol=-1;
                 selRow++;
                 }           
                }
                else if(selCol==0) //当第一列获得焦点时,将跳过后来两格到第四列
                {
                 selCol=selCol+2;
                }       
                                
                dataTable.changeSelection(selRow,selCol+1,false,false);
                dataTable.editCellAt(selRow,selCol+1);
                
                if(dataTable.getEditorComponent()!=null)
                dataTable.getEditorComponent().requestFocus();
            }
        };        dataTable.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),"moveForward");
        dataTable.getActionMap().put("moveForward",moveForward);

解决方案 »

  1.   

    一定要先找出选定了哪个Cell,再计算下一个Cell的位置吗?
    现在用Tab键和Shift+Tab就能在Cell之间移动,能不能调用什么设置来用Enter和Shift+Enter替换掉达到想要的效果?
    不能使用KeyboardFocusManager进行这样的焦点控制?
      

  2.   

    我用    
        JTable jt = new JTable();
        java.util.Set aaa = new java.util.HashSet(1);
        aaa.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER,1));
        jt.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,aaa);
        jt.setModel(test);这样的方法设定Shift+Enter为focusTraversalKeys为什么不行呢?老是跳不出原来的Cell郁闷ing~~~~~~~~~~我看到的一种写法是抓到选中的Cell的Row和Column,然后Column上+1......