我有一个jtable,其中的一列绑定一个jcombox
当我选中第三行的jcombox(注意:是选中但不是下拉,仅仅是选中状态)删除该行完成的时候
第四行的jcombox发生了变化:值变为 刚刚删除的那一行的值,状态,也变为默认选中状态。
等于是第三行的已经被删除的jcombox原封不动的覆盖了第四行的Jcombox.
请各位老大解个惑。非常感谢!
本人分不多,就散10分吧!就算兄弟们帮帮忙吧!

解决方案 »

  1.   

    补充一下:
    我的jdk用的是1.4版本的。
      

  2.   

    DefaultTableModel model=(DefaultTableModel)table1.getModel();
    //row:要删除的行的序号
    model.removeRow(row)试试这样的
      

  3.   


    删除的代码,就是这些了:
    private void delButtonActionPerformed(java.awt.event.ActionEvent e) { DefaultTableModel defaultModel = (DefaultTableModel) dataTable
    .getModel(); int rowcount = defaultModel.getRowCount() - 1;
    // getRowCount返回行数,rowcount<0代表已经没有任何行了。
    if (index >= 0) {
    // 删除行比较简单,根据选中行的索引用DefaultTableModel的removeRow()方法即可。
    defaultModel.removeRow(index);
    // 行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。
    defaultModel.setRowCount(rowcount); //Focus设置
    if (dataTable.getRowCount()>index) {
    dataTable.requestFocus(); //中间删除向下移动
    dataTable.changeSelection(index, 0, false, false);
    dataTable.editCellAt(index, 0, null);
    } else{
    dataTable.requestFocus(); //末尾删除向上移动
    dataTable.changeSelection(dataTable.getRowCount()-1, 0, false, false);
    dataTable.editCellAt(dataTable.getRowCount()-1, 0, null);
    } index = -1; }
    dataTable.revalidate();
    }
      

  4.   

    首先多谢yh10231033 兄弟的关注。我用的删除方法和你说的一样我用的是这一句
    defaultModel.removeRow(index); index的值是在new DefaultTableModel()的时候,在下面这个方法里赋值的:
    public boolean isCellEditable(int rowIndex, int columnIndex) {

    index =  rowIndex;
    if (InsureToolUtil.isFile(this, rowIndex) && columnIndex == 3) {
    return false;
    }
    return canEdit[columnIndex];
    }
    这个地方判定所选择的行号。这个地方判定所选择的行号的原因
    因为我们在 一个单元格里放了一个Jcombox,我出现了一个状况,就是 当我点击jcombox 而不是他所在的单元格的时候,有时候jcombox被选中却不能触发Jtable的事件
    this.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
    } public void mousePressed(java.awt.event.MouseEvent evt) {
    tableDataMousePressed();//XXXXXX 这个方法不能被调用
    }
    });导致我不能获得当前的行号。 取了个巧就在判断单元格是否可以编辑的时候 获得了行号。
      

  5.   

    在删除的时候 cancelEditingEditor删除的时候可能不会失去焦点,需要自己去调用 cancelEditing,再进行删除
      

  6.   

    啊--!看来有点眉目了
    gongfuliang 兄弟的说法让我产生了点灵感
    你的意思也就是说:
    当我删除了之后,jcombox的焦点还没有消失,
    所以根据我上面的程序,我删除了第三行之后,当Jcombox失去焦点的时候他仍然会在它默认的index上更新单元格的值。而这个时候DefaultTableModel已经自动地把下一行的值提前(Jcombox所记忆的)index上的数据已经发生了变化。
    所以在删除之前,要转移该待删除行的jcombox的焦点。
    基于这个理解,我做了以下测试:把//Focus设置 
    if (dataTable.getRowCount()>index) { 
    dataTable.requestFocus(); //中间删除向下移动 
    dataTable.changeSelection(index, 0, false, false); 
    dataTable.editCellAt(index, 0, null); 
    } else{ 
    dataTable.requestFocus(); //末尾删除向上移动 
    dataTable.changeSelection(dataTable.getRowCount()-1, 0, false, false); 
    dataTable.editCellAt(dataTable.getRowCount()-1, 0, null); 
    } 移动至删除语句:// 删除行比较简单,根据选中行的索引用DefaultTableModel的removeRow()方法即可。 
    defaultModel.removeRow(index); 的前面。问题解决!
      

  7.   

    该结贴了,整理一下。正确的source
    private void delButtonActionPerformed(java.awt.event.ActionEvent e) { DefaultTableModel defaultModel = (DefaultTableModel) dataTable 
    .getModel(); int rowcount = defaultModel.getRowCount() - 1; 
    // getRowCount返回行数,rowcount <0代表已经没有任何行了。 
    if (index >= 0) { //Focus设置 
    if (dataTable.getRowCount()>index) { 
    dataTable.requestFocus(); //中间删除向下移动 
    dataTable.changeSelection(index, 0, false, false); 
    dataTable.editCellAt(index, 0, null); 
    } else{ 
    dataTable.requestFocus(); //末尾删除向上移动 
    dataTable.changeSelection(dataTable.getRowCount()-1, 0, false, false); 
    dataTable.editCellAt(dataTable.getRowCount()-1, 0, null); 
    // 删除行比较简单,根据选中行的索引用DefaultTableModel的removeRow()方法即可。 
    defaultModel.removeRow(index); 
    // 行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。 
    defaultModel.setRowCount(rowcount); index = -1; } 
    dataTable.revalidate(); 
    } 顺便问一句,前面的代码中,当我点击到jcombox中,jcombox获得焦点,为什么不能触发那个jtable的事件呢?
    期待有兄弟能够回答啊,呵呵。
      

  8.   

    啊--变成乞丐了。呵呵。顺便问一句,前面的代码中,当我点击到jcombox中,jcombox获得焦点,为什么不能触发那个jtable的事件呢? 
    期待有兄弟能够回答啊,呵呵。
      

  9.   

    当JComboBox展现的时候,Table的MouseListener就不会起作用了,因为MouseEvent并不在Table上产生