不是两个Listener的问题,输入回车以后下面这句的col变成-1,所以就出错了
System.out.println(jt.getValueAt(selected,col));model.addRow()以后表格当前选中的不是你刚刚输入数据的那个单元了。

解决方案 »

  1.   

    bjzhanghao(八进制):
    没有听懂你的分析!
      

  2.   

    按回车后先执行的是keylistener里的操作,其中不是有addRow()吗,
    然后执行tablemodellistener里的操作,里面的jt.getValueAt(selected,col);这句话取不到刚才输入回车的那个单元格,跟踪一下就知道了,col得到的是-1。
      

  3.   

    是的,是的,您说的这点我看出来了,我改了一下:但是只执行了keyPressed方法,tableChanged没有被执行!我希望的是:先打印,再增加行!!!class keylistener implements KeyListener,TableModelListener
       {
    public void tableChanged(TableModelEvent e) {
        int selected = e.getFirstRow();
        int col=e.getColumn();
        //System.out.println(selected);
        System.out.println(jt.getValueAt(selected,col));
    }
       public void keyPressed(KeyEvent evt) {
    //JDialog jfr=new JDialog(); 
    JFrame jfr=new JFrame();
    JLabel tmpj=new JLabel("表格当前行号已打印",JLabel.CENTER);
       //JPanel jfr=new JPanel();
       int keyCode=evt.getKeyCode();
       if(keyCode==KeyEvent.VK_ENTER){
       model.addRow(new Vector());
       jfr.getContentPane().add(tmpj);jfr.setSize(600,400);jfr.show();
         }
                                              }
       public void keyReleased(KeyEvent event) {}
       public void keyTyped(KeyEvent event) {}
      }
      

  4.   

    搂主,帮你的需求先说清楚,我觉得你这个keyListener就是没有必要的。
    keypress中的addrow操作是会促发modelchange事件的。
    你要增加行,在tablechange里加也是应该可以的比如:
    class tablemodellistener implements TableModelListener
    //这个监听打印表格中所输字符

      public void tableChanged(TableModelEvent e) {
        int selected = e.getFirstRow();
        int col=e.getColumn();
        if(selected>=0 && col>=0){
        System.out.println(jt.getValueAt(selected,col));
        model.addRow(new Vector());
       }
    }}