【问题标题】:InsertRow in JTable via array (array is populated by data) no errors通过数组在 JTable 中插入行(数组由数据填充)没有错误
【发布时间】:2014-02-13 15:20:39
【问题描述】:

我正在尝试从数据库中检索数据并将其显示在 JTable 中。我正在使用 NetBeans,在调试中我注意到实际上检索了来自数据库的数据,并且数据填充在数组“约会”中,但不知何故,它通过了这些代码行(应该将所有内容插入表中)并停止,好像一切都完成了,没有任何错误,尽管在 GUI 中没有任何显示。您的帮助将不胜感激。

private void search(){

        try{
            Model_Customer[] appointment = Controller_ManageCustomer.FindCustomers(Searchtxt.getText());
            resultModel.setRowCount(0);

            for(int i = 0; i < appointment.length; i++)
                resultModel.insertRow(i,new Object[]{appointment[i].GetID(),appointment[i].GetFName(), appointment[i].GetLName(), appointment[i].GetRegistration(), appointment[i].GetMake(), appointment[i].GetModel(), appointment[i].GetEngine(), appointment[i].GetYear(), appointment[i].GetMileage(), appointment[i].GetType(), appointment[i].GetDate(), appointment[i].GetTime()});

        }catch(Exception ex){
            JOptionPane.showMessageDialog(this,ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
        }
    }
      DefaultTableModel resultModel = new DefaultTableModel();

在 NetBeans Design 中,表格代码为:

tableresult = new javax.swing.JTable(resultModel);

tableresult.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null}
    },
    new String [] {
        "ID", "FName", "LName", "Registration", "Make", "Model", "Engine", "Type", "Date", "Time"
    }
));



jScrollPane1.setViewportView(tableresult);

【问题讨论】:

  • 您的代码不完整。您将展示如何创建 resultModel 变量,并展示将数据添加到 TableModel 的代码。但是您不会将 TableModel 添加到表中。如果您需要更多帮助,请发布您的 MCTRE
  • 为什么有一个新的resultModel 声明之后你在上面使用resultModel

标签: java arrays swing netbeans jtable


【解决方案1】:

你可以做的很简单: 定义一个带空参数的 jtable 模型,而不是将这个模型添加到 Jtable 中,另一方面,当您想从数据库中检索数据时,您必须声明两个表,第一个将包含表 n 的标题,第二个将具有两个维度并且将包含您需要的数据而不是您必须设置的表格作为参数到 jtable 的模型而不是将此模型添加到 jtable :) 如果您不太了解,请遵循以下代码: 此方法使用树参数从数据库中检索数据: sqlcounter 查询计算从选择查询返回的行数 sql查询从数据库中选择数据 NumberOfRowsToShowInTables 是要在表格中显示的行数,它可以是 0 或 10 或其他数字,如您所愿 rscounter是查询sqlcounter的语句stmt执行的Resultset RsSelecting是查询sql的语句执行结果集 二维字符串数据表 header 是数据库中表的冒号名称

rs

public void SelectData(String sqlcounter ,String sql,int NumberOfRowsToShowInTables){
     if(NumberOfRowsToShowInTables==0){
         NumberOfRowsToShowInTables=10;
     }
        try {
         RsCounter=stmt.executeQuery(sqlcounter);
            System.out.println(sqlcounter);
            while(RsCounter.next()){

                countrow=RsCounter.getInt("COUNTR");
                System.out.println(countrow+"\n");
                if(NumberOfRowsToShowInTables>countrow)
                    NumberOfRowsToShowInTables=countrow;
                sql=sql+" LIMIT "+NumberOfRowsToShowInTables+" OFFSET "+(countrow-NumberOfRowsToShowInTables);  
                countrow=NumberOfRowsToShowInTables;

            }
            System.out.println(sql);
         RsSelecting = stmt.executeQuery(sql);
         data=new String[countrow][RsSelecting.getMetaData().getColumnCount()];

         header= new String[RsSelecting.getMetaData().getColumnCount()];

     i=0;
     while(RsSelecting.next()){
      for(j=0;j<RsSelecting.getMetaData().getColumnCount();j++){

              data[i][j]=(RsSelecting.getString(j+1));
              header[j]=RsSelecting.getMetaData().getColumnName(j+1);
              System.out.print(data[i][j]+"\n");

     }    


      i++;

     }
      i=j=0;
        } catch (SQLException ex) {
                       ex.printStackTrace();

            Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex);
        }
   }

比你用getter方法获取数据和标题

 public String [][] getData(){
       return data;
   }
   public String [] GetHeader(){
       return header;
   }

然后使用 then 方法将这些值设置为模型的参数

jTable1 = new javax.swing.JTable();
model = new DefaultTableModel(data, header)
jTable1.setModel(model);

希望对你有用

【讨论】:

    【解决方案2】:

    我正在做的是从database 检索数据并使用Netbeans 将其显示在JTable 上就是这样:

    //全局声明

    private Vector<Vector<String>> data; //used for data from database
    private Vector<String> header; //used to store data header
    

    //向JTable显示信息

    data = get();
    
    //create header for the table
    header = new Vector<String>();
    header.add("Column1"); 
    header.add("Column2");
    ...
    model=new DefaultTableModel(data,header);
    table = new JTable(model);
    

    这将帮助您从数据库中获取数据

    get(){
    Vector<Vector<String>> doublevector = new Vector<Vector<String>>();
    
    Connection conn = dbConnection();//Your Database connection code
    PreparedStatement pre1 = conn.prepareStatement("select * from Table");
    
    ResultSet rs1 = pre1.executeQuery();
    while(rs1.next())
    {
    Vector<String> singlevector = new Vector<String>();
    singlevector.add(rs1.getString(1)); 
    singlevector.add(rs1.getString(2)); 
    ....
    doublevector.add(singlevector);
    
    }
    
    return doublevector;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多