用JTable执行编辑实现你说的那种功能(实际上这不单单是JTable的问题,所有的Swing界面都要考虑界面处理的设计方法),需要重新设计界面处理逻辑。我的做法是:所有需要保存的数据抽象成Persistable接口,里面有一些和存储相关的方法(类似于JDO的处理方式)。这些对象自己维护其属性的变化日志(界面对其执行的修改),在最后执行提交时用这些日志更新数据库。针对利用JTable进行编辑的界面,我继而抽象出TabularData接口。需要通过JTable进行编辑的对象可以实现此接口。从而可以放在JTable中进行编辑。下面是我的代码片断:public interface TabularData{
        public Object getValueAt(int columnIndex);        public void setValueAt(Object aValue, int columnIndex);        public int getColumnCount();        public Class getColumnClass(int columnIndex);        public String getColumnName(int columnIndex);        public boolean isCellEditable(int col);        public Object getData();
}public interface Persistable{
        public int getDataState();//需要保存到数据库的对象根据该状态决定执行insert还是updata还是delete        public boolean reconvert();        public RelationChange[] getRelationChangeLog();        public void setOriginalDataState(int theOriginalState);        public Object getOriginalData();
}

解决方案 »

  1.   

    to 
    joy_wind(wind)
    请问TabularData接口是不是作为jtable的一个构造函数的一个数据模型来使用
    请问Persistable接口具体怎么用呀,以前我没接触过请大哥们给与指教
      

  2.   

    用 DataExpress和dbSwing很方便的
      

  3.   

    to 
    joy_wind(wind)
    请问TabularData接口是不是作为jtable的一个构造函数的一个数据模型来使用
    请问Persistable接口具体怎么用呀,以前我没接触过请大哥们给与指教
    ==============================
    差不多吧,TabularData接口是作为JTable的数据用的。实际上你还要写自己的TableModel,比如我自己写了一个DataTableModel,它继承了AbstractTableModel,里面维护的数据就是一个TabularData的数组。Persistable是所有要持久化的对象都应该实现的一个接口。比如User,Company这样的对象,如果对它们的修改要更新到数据库中,就让他们实现Persistable接口。然后通过这个接口,在更新数据库时创建出不同的sql语句(update、delete或者insert)。这个接口还提供了重置的功能(reconvert方法),比如用户在界面上做了修改,最后又想恢复到修改前的状态,就可以调用这个reconvert方法。最后说一下,如果你的数据对象要放在JTable中编辑,可能两个接口就都要实现了。
    我上面说的这种持久化设计方式,对简单的Swing应用(applet或者application)还可以,我在自己的一个简单的applet应用里就是这样做的。对于复杂的应用系统来说,这样的设计用起来就显得有点繁琐了,或者至少还要再精心考虑考虑;如果你的应用比较复杂,那就值得研究研究JDO或者其他一些OR映射的东西。
      

  4.   

    补充一下,对于面向对象的Swing界面程序,界面对数据对象的修改,以及对这些修改所作的记录,是一个比较有意思的设计问题,而且也远不是想象的那么简单。
      

  5.   

    你可以重载DefaultDataTableModel类,在新类中对于每次数据的变化作处理。只有当数据变化时才存储数据库
      

  6.   

    下面是我的代码片断:public interface TabularData{
            public Object getValueAt(int columnIndex);        public void setValueAt(Object aValue, int columnIndex);        public int getColumnCount();        public Class getColumnClass(int columnIndex);        public String getColumnName(int columnIndex);        public boolean isCellEditable(int col);        public Object getData();
    }
      

  7.   

    to RomandAccessFile(goodghost) 
     先谢谢上楼大哥
      

  8.   

    for (i=0,table.getRowCount(),i++)
        {for (j=0,table.table.getColumnCount(),j++)
                   victor dd[][].addElement(getValueAt(i,j))
        } 
    for用逗号的吗?