主要代码如下:
class Test{
        map = BcDatabase.getBardno("select * from bar_dno ");
        
        item = map.keySet().iterator();
        while(item.hasNext())
        {
            String strKey = (String)item.next();
            dno = (BcDbBardno)map.get(strKey);
            str3Code = dno.getCODE();
            str4Code = dno.getDNO();
            str5Code = dno.getKEY();
            
            System.out.println(str3Code);
            v1.addElement(str3Code);                 
            vector.addElement(v1);
        }
MyTabel my = new MyTabel();
table = new JTable(my);class MyTable extends AbstractTableModel
{
     public int getRowCount()
     {
         //System.out.println(vector.size());
         return vector.size();
     }
     public int getColumnCount()
     {
          return name.length;
     }
     public Object getValueAt(int row, int column)
     {
         if(!vector.isEmpty())
         {
             //System.out.println(((Vector)vector.elementAt(row)).elementAt(column).toString());
             return ((Vector)vector.elementAt(row)).elementAt(column);
         }
         else
         {
             return null;
         }
     }
     
     public String getColumnName(int column)
     {
         return name[column];
     }
     
     public Class getColumnClass(int c)
     {
         //System.out.println(getValueAt(0,c).getClass().getName());
         return getValueAt(0,c).getClass();
     }//取得列所属对象
 } 
}
为什么jtable中显示的全是一样的数据????
急!!

解决方案 »

  1.   

    告诉你一个方法其实在JTable 里面的话,有一个这样的方法的 
    JTabel(Vector,Vector) 的上面查询数据的话
    直接就用一个声名好的 向量来保存数据 如 
    V.getString("a") V.getString("b"); 然后直接把V向量放到 JTable 里面就可以了。
    如果这样做达不到你的效果的话,我发我的一段 JTable 的核心代码给你。你只需要把数据库语句写好放到响应的函数里就好了。自己慢慢看。
    //////////////////////////////////////////以下是JTable的核心代码

    ///////////////////////////////////////////////////SQL语法驱动

      String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=data\\member.mdb";
          String username = ""; 
          String password = ""; 
          //加载驱动程序以连接数据库
          try { 
             Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
             connection = DriverManager.getConnection( 
                url, username, password ); 
          } 
          //捕获加载驱动程序异常
          catch ( ClassNotFoundException cnfex ) { 
             System.err.println( 
                "装载 JDBC/ODBC 驱动程序失败。" ); 
             cnfex.printStackTrace(); 
             System.exit( 1 );  // terminate program 
          } 
          //捕获连接数据库异常
          catch ( SQLException sqlex ) { 
             System.err.println( "无法连接数据库" ); 
             sqlex.printStackTrace(); 
             System.exit( 1 );  // terminate program 
          } 
          //如果数据库连接成功,则建立GUI
          //SQL语句
    ///////////////////////////////////////////////////////SQL语法驱动
          
          
           
          submitQuery = new JButton( "更新下列数据" ); 
          //Button事件
          submitQuery.addActionListener( 
             new ActionListener() { 
                public void actionPerformed( ActionEvent e ) 
                { 
                   getTable(); 
                } 
             }   
          ); 
    ////////////////////////////////////////////////////////////////////////////以下是整个画面的布局
          JPanel topPanel = new JPanel(); 
          JPanel topPanelx = new JPanel();
          
          topPanel.setLayout( new BorderLayout() ); 
          //将"输入查询"编辑框布置到 "CENTER"
          
          //将"提交查询"按钮布置到 "SOUTH"
          topPanelx.add(submitQuery);
          topPanelx.add(jcjl);
          topPanelx.add(jcli);
          topPanelx.add(jcjl1);
          topPanelx.add(jctf);
          topPanelx.add(jcjb);
          
          topPanel.add( topPanelx, BorderLayout.SOUTH ); 
          
          table = new JTable(); 
          Container c = getContentPane(); 
          c.setLayout( new BorderLayout() ); 
          //将"topPanel"编辑框布置到 "NORTH"
          c.add( topPanel, BorderLayout.NORTH ); 
          //将"table"编辑框布置到 "CENTER"
          c.add( table, BorderLayout.CENTER );      
          getTable(); 


    secondJP.add(c,BorderLayout.CENTER);
    secondJF.add(secondJP);
    secondJF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    secondJF.setBounds(200,100,850,500);
    secondJF.show();


       private void getTable() //////////////////更新列表
       { 
          try { 
            //执行SQL语句
             String sq ="SELECT * FROM lyh";
             statement = connection.createStatement(); 
             resultSet = statement.executeQuery( sq );         
             //在表格中显示查询结果
             displayResultSet( resultSet ); 
          } 
          catch ( SQLException sqlex ) { 
             sqlex.printStackTrace(); 
          } 
       } ////////////////////////////////////////////////////////////////结束更列表结束
     private void getjcTabel() /////////////////筛选细信息的查询
       { 
       
      
          try { 
            //执行SQL语句
            String getjctf = jctf.getText();
            
            String getjcli =(String)jcli.getSelectedItem(); 
            System.out.println(getjcli);
             String sqt ="select * from lyh where "+getjcli+" like '"+"%"+getjctf+"%"+"'  ";
             statement1 = connection.createStatement(); 
             resultSet1 = statement.executeQuery( sqt );         
             //在表格中显示查询结果
             
             
             
             displayResultSet( resultSet1 ); 
          } 
          catch ( SQLException sqlejc ) { 
             System.out.println("出现异常"+sqlejc);
             sqlejc.printStackTrace(); 
          } 
       } 
    /////////////////////////////////////////////////////////////结束筛选信息的查询
       private void displayResultSet( ResultSet rs ) 
          throws SQLException 
       { 
          //定位到达第一条记录
          boolean moreRecords = rs.next();  
          //如果没有记录,则提示一条消息
          if ( ! moreRecords ) { 
             JOptionPane.showMessageDialog( this, 
                "结果集中无记录" ); 
              
             return; 
          } 
          Vector columnHeads = new Vector(); 
          Vector rows = new Vector(); 
          try { 
             //获取字段的名称
             ResultSetMetaData rsmd = rs.getMetaData(); 
             for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) 
                columnHeads.addElement( rsmd.getColumnName( i ) ); 
             //获取记录集
             do { 
                rows.addElement( getNextRow( rs, rsmd ) ); 
             } while ( rs.next() ); 
             //在表格中显示查询结果
             table = new JTable( rows, columnHeads ); 
             JScrollPane scroller = new JScrollPane( table ); 
             Container c = getContentPane(); 
             c.remove(1); 
             c.add( scroller, BorderLayout.CENTER ); 
             //刷新Table
             c.validate(); 
          } 
          catch ( SQLException sqlex ) { 
             sqlex.printStackTrace(); 
          } 
       } 
       private Vector getNextRow( ResultSet rs, 
                                  ResultSetMetaData rsmd ) 
           throws SQLException 
       { 
          Vector currentRow = new Vector(); 
          for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) 
             currentRow.addElement( rs.getString( i ) ); 
          //返回一条记录   
          return currentRow; 
       }    public void shutDown() 
       { 
          try { 
            //断开数据库连接
             connection.close(); 
          } 
          catch ( SQLException sqlex ) { 
             System.err.println( "Unable to disconnect" ); 
             sqlex.printStackTrace(); 
          } 
       } 
       
       ///////////////////////////JTable核心代码结束