我做的是从数据库中读出来的数据集,放到JTable中,一共三列,每一列都在TABLE下面对应一个JTextfield.选中其中一行,则3个JTextfield 就对应显示那一行的3列.我想做到的是,在JTextfield 中修改列的值,JTable中对应的那一行那一列的值会跟着改变,在我选择了其他行后,前面更改的结果就会保存在TABLE中。请高手帮帮忙给段代码,谢谢
问题补充:这个JTable在修改了之后,要在数据库中同步修改。

解决方案 »

  1.   

    JTable.getValueAt(int row, int column) 
              返回 row 和 column 位置的单元格值。
    JTable.getSelectedRow() 
              返回首个选定行的索引,如果没有选定的行,则返回 -1。
    JTable.setValueAt(Object aValue, int row, int column) 
              设置表模型中 row 和 column 位置的单元格值。
    利用这些方法(部分),再加上监听事件什么的
    lz可以多查一下api~
      

  2.   

    可以设置table cell 可编辑.或者加个tableEditor.
    然后当点中某行时,getSelectedRow.让这行全可编辑.
    如果要让某个单元格被改时后面几个时时被修改.可以加个DocumentListener.
    然后焦点离开时让它进数据库.注册个FocusListener的lost.
    具体怎么做,可以去看java api.
      

  3.   

    我正在写的程序功能跟LZ的相似,若有兴趣可以把你的QQ号码发到我的邮箱,加为好友我们互相探讨.
    我用的是ACCESS数据库,用update...set...where语句修改字段值,虽然值已经改过来,但同时抛出异常,不知是什么原因?  
      

  4.   

    第一次发帖,不会结贴,,没给大家分数真是抱歉,在这里要感谢你们的帮助,特别是SEEE2008 ,跟我研究了两天,今天早上终于搞定了,虽然效果还是没能跟我想的一样,但是还勉强可以了。
      

  5.   

    现在把我成功做出来的代码贴出来给大家参考指导一下。我做的是出数据库读出数据,然后把得到的数据集,放到二维数组中,这样就要重写getValueAt(int row, int column)这个方法, 
    public Object getValueAt(int r, int c) {
               return ((String[])result.elementAt(r))[c];//result是我已经赋好值的数组
            }
    然后要保证单元格可编辑,重写下面这个方法
    public boolean isCellEditable(int r, int c) {
                return true;
            }
    但是要使修改单元格的值有效,就要重写public void setValueAt( Object value,int r , int c )这个方法
    public void setValueAt( Object value,int r , int c ) 
    {   
           ((String[])result.elementAt(r))[c]=(String) value;
           fireTableChanged(null);//一定要加,不然修改也没有
    }
    然后在jTextField上得到修改的值,调用setValueAt,就完成了
    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
            try {
                String changeValue = jTextField1.getText();
                jTable1.setValueAt(changeValue, jTable1.getSelectedRow(), 0);
                String sql = "...";//相应的更新语句
                stat.executeUpdate(sql);
            } catch (SQLException ex) {
                Logger.getLogger(DBJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        }不足之处:没有实现在jTextField修改的同时,单元格也跟着同步改,只能等我写完,回车了,才显示到单元格上。有高手帮忙想想怎么做到这个,谢谢
    还有就是会出现数组越界问题,我查了一下好像没错,大家帮忙看看,我给数组赋值的时候有没有问题:
      try {
                    rsmd = rs.getMetaData();
                    colCount = rsmd.getColumnCount();
                    result = new Vector();
                    headers = new String[colCount];
                    for (int h = 1; h <= colCount; h++) {
                        headers[h - 1] = rsmd.getColumnName(h);
                    }
                    while (rs.next()) {
                        String[] record = new String[colCount];
                        for (int i = 1; i <=colCount; i++) {
                            record[i-1] = rs.getString(i);
                        }
                        result.addElement(record);
                    }
                    fireTableChanged(null);
                } catch (SQLException e) {
                    e.printStackTrace();
                }