回 帖 发 新 帖 刷新版面

主题:jtable 键盘事件

我想双击表格的某个单元格,修改其中的数据,修改完后按enter键激发键盘事件,但我的代码不能执行键盘事件,不知是什么原因?代码如下:
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
public class Test  {
    JTable table;
    int rownum,colnum;
    public Test() throws Exception{
        int i,j,RowNum,ColNum;
        String sqlstr;
        ResultSet res;
        JFrame f=new JFrame();
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost/test";
        Connection con=DriverManager.getConnection(url,"guest","");
        Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        sqlstr="select count(*) from txl";
        res=stmt.executeQuery(sqlstr);
        res.next();
        RowNum=res.getInt(1);
        sqlstr="select * from txl";
        res=stmt.executeQuery(sqlstr);
        ResultSetMetaData rsmd=res.getMetaData();
        ColNum=rsmd.getColumnCount();
        String[] names=new String[ColNum];
        for(i=1;i<=ColNum;i++)
            names[i-1]=rsmd.getColumnName(i);
        Object[][] info=new Object[RowNum][ColNum];
        i=0;
        while(res.next()){
            for(j=1;j<=ColNum;j++)
                info[i][j-1]=res.getObject(j);
            i++;
        }
        res.close();
        stmt.close();
        con.close();
        table=new JTable(info,names);
        JScrollPane scrollpane=new JScrollPane(table);
        Container cont=f.getContentPane();
        cont.add(scrollpane);
        table.addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode()==KeyEvent.VK_ENTER)
                    System.out.println("hello");
            }
        });
        f.pack();
        f.setVisible(true);
}
        public static void main( String []args)throws Exception {
    new Test();
}    
  
}
请各位指教。

回复列表 (共3个回复)

沙发

应该用动作事件才能触发,addActionListener();并且用actionPerformed()方法。

板凳

谢谢你的答复。终于有人回复了。问题是我是要对键盘事件进行处理,用actionPerformed不行吧。

3 楼

困扰了我几天的问题终于解决了,要用tablemodellistener
table.getModel().addTableModelListener(new TableModelListener(){
            public void tableChanged(TableModelEvent t){
                System.out.println(table.getValueAt(rownum, colnum));
            }
        });
就能实现修改完数据后(光标还在单元格中时)按下enter键就能实现。用addkeylistener的话则要按2次enter键。        

我来回复

您尚未登录,请登录后再回复。点此登录或注册