setRowSelectionInterval(int index0, int index1)

解决方案 »

  1.   

    if((col+1)==cct && keycode==KeyEvent.VK_ENTER){ 
      model.addRow(new Vector());
      jt.setColumnSelectionInterval(0,0); //add this line, select the first col
    }
      

  2.   

    if((col+1)==cct && keycode==KeyEvent.VK_ENTER){ 
                    rowcount=model.getRowCount();
                    model.addRow(new Vector());
                    jt.changeSelection(selected-1,0,true,true);
                    }
      

  3.   

    一点点错误,
    因为你的selected变量没赋值,
    应用
                    if((col+1)==cct && keycode==KeyEvent.VK_ENTER){ 
                    selected=jt.getSelectedRow();
                    model.addRow(new Vector());
                    jt.changeSelection(selected,0,true,true);
                    }如果想放到最后一行的话就用
                    if((col+1)==cct && keycode==KeyEvent.VK_ENTER){ 
                    rowcount=model.getRowCount();
                    model.addRow(new Vector());
                    jt.changeSelection(rowcount-1,0,true,true);
                    }
      

  4.   

    你没试么
    就是最后单元格上按下回车键后,会增加一行并让焦点停在所增加行的第一个单元格中啊import javax.swing.*;
    import java.util.*;
    import javax.swing.table.*;
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.lang.String;public class no2 extends JApplet
    {
        static int v = JSplitPane.VERTICAL_SPLIT;
        Vector srcdata = new Vector();
        String[] columnName =
            {"×Ö¶Î","×Ö¶Î","×Ö¶Î","×Ö¶Î"};
        Vector rowdata = new Vector();
        Vector cname = new Vector(4);
        JTable jt = new JTable();
        DefaultTableModel model = new DefaultTableModel(srcdata,cname);
        JScrollPane js = new JScrollPane(); //´´½¨¹ö¶¯´°    public void init()
        {
            Container c = this.getContentPane();
            JPanel jp1 = new JPanel(); //×°Ôز˵¥µÄÃæ°å
            jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
            JMenuBar jmb = new JMenuBar(); //´´½¨²Ëµ¥Ìõ
            JMenu buymenu = new JMenu("²Ëµ¥");
            JMenuItem b1 = new JMenuItem("×ÓÏî");
            buymenu.add(b1); //½«×ÓÏî¼ÓÈë²Ëµ¥
            jmb.add(buymenu); //½«²Ëµ¥¼ÓÈë²Ëµ¥Ìõ
            jp1.add(jmb); //½«²Ëµ¥ÌõÈëÃæ°å
            JPanel jp2 = new JPanel(); //×°Ôرí¸ñµÄÃæ°å
            JSplitPane jsp = new JSplitPane(v,true,jp1,js);
            rowdata.add("");
            rowdata.add("");
            rowdata.add("");
            rowdata.add("");
            cname.add(columnName[0]);
            cname.add(columnName[1]);
            cname.add(columnName[2]);
            cname.add(columnName[3]);
            srcdata.add(rowdata);
            jt.setModel(model);
            jt.setCellSelectionEnabled(true); //ÊÇÄÜ·ñÑ¡ÖÐÒ»¸öcell£¬Ò²¾ÍÊÇÒ»ÐкÍÒ»ÁеĽ»²æµ¥Ôª¸ñ
            jt.setColumnSelectionAllowed(true);  //ÊÇÄÜ·ñÑ¡ÖÐÒ»ÁР       b1.addActionListener(new java.awt.event.ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    if(event.getSource()instanceof JMenuItem)
                    {
                        js.add(jt);
                    }
                    js.getViewport().setView(jt);
                }
            });        jt.addKeyListener(new java.awt.event.KeyListener()
            {
                int col = 0; 
                int selected; 
                int rowcount;
                public void keyPressed(KeyEvent e)
                {
                    JDialog jfr = new JDialog();
                    col = jt.getSelectedColumn();
                    int cct = jt.getColumnCount();
                    int keycode = e.getKeyCode();
                    showStatus("col:" + col + "selected:" + selected);
                                    if(keycode == KeyEvent.VK_ENTER && col == 0)
                    {   rowcount=model.getRowCount();
                        String calls = jt.getValueAt(selected,col).toString();
                        JLabel tmpj = new JLabel("¸Ã±í¸ñ¹²"+rowcount+"ÐУ¬" + cct + "ÁС£" + "ÄúÔÚµÚ" + (selected + 1) + "ÐеÚ" + (col + 1) + "µ¥Ôª¸ñ´¦ÊäÈëÁË×Ö·û£º" + calls,JLabel.CENTER);
                        jfr.getContentPane().add(tmpj);
                        jfr.setSize(600,400);
                        jfr.show();
                    }                 if((col+1)==cct && keycode==KeyEvent.VK_ENTER){ 
                    selected=jt.getSelectedRow();
                    model.addRow(new Vector());
                    jt.changeSelection(selected,0,true,true);
                    }                //¶Ô´ò¿ªµÄ¶Ô»°¿ò½øÐмàÌý£¬µ±¹Ø±Õºó£¬ÔòÌøµ½µÚ¶þ¸ñ£¡
                    jfr.addWindowListener(new WindowAdapter()
                    {
                        public void windowClosing(WindowEvent e)
                        {
                            jt.setEditingColumn(col + 1);  //ÉèÖñ»±à¼­µÄÁмÓ1
                        }
                    });
                }
                public void keyTyped(KeyEvent e)
                {}
                public void keyReleased(KeyEvent e)
                {}
            });
            c.add(jsp);
        }
    }
      

  5.   

    Hodex(小何才露尖尖角) :
    首先谢谢您对我的帮助,
    你的代码的确实现了焦点的确停在了所增加的行的第一单元格处,但在所增行的第一单元格输入字符后,再按下回车键就又跳回到第一行上去了
    应该能做到所增加的每一行都于第一行的操作结果相同,即:1.第一行中第一单元格输入字符按下回车后,会调用JDialog
    2.JDialog关闭后,焦点到该行的下一单元格
    3.当在首行最后单元格处按下回车键后,先增加行,然后其它功能与首行一样
    4.无论增加行,其行效果都与首行一样
      

  6.   

    用SetColumnSelectionInterval() 或者 changeSelection 都已实现你的要求:“让光标停在所增加行的第一个单元格中”。
    按下回车键就又跳回到第一行, 这是FocusTraverse的默认行为。"Enter"后,同列的下一行单元得到Focus, 到最后一行,下一次就是下一列的第一行。MS Excel 不是这样的吗?要实现你的焦点转移要求,则需要增加相应焦点转移的代码。例如下面的代码没有用处。
    ***********
     //对打开的对话框进行监听,当关闭后,则跳到第二格!
                    jfr.addWindowListener(new WindowAdapter()
                    {
                        public void windowClosing(WindowEvent e)
                        {
                            jt.setEditingColumn(col + 1);  //设置被编辑的列加1
                        }
                    });
    ********************