不是两个Listener的问题,输入回车以后下面这句的col变成-1,所以就出错了
System.out.println(jt.getValueAt(selected,col));model.addRow()以后表格当前选中的不是你刚刚输入数据的那个单元了。
System.out.println(jt.getValueAt(selected,col));model.addRow()以后表格当前选中的不是你刚刚输入数据的那个单元了。
没有听懂你的分析!
然后执行tablemodellistener里的操作,里面的jt.getValueAt(selected,col);这句话取不到刚才输入回车的那个单元格,跟踪一下就知道了,col得到的是-1。
{
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) {}
}
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());
}
}}