【问题标题】:Create vector for DefaultTableModel为 DefaultTableModel 创建向量
【发布时间】:2014-03-06 23:48:26
【问题描述】:
public static DefaultTableModel localQuery(String searchTerm){

    List<String[]> result = new ArrayList<String[]>();
    String[] rowResult = new String[7];
    Vector<String[]> rows = new Vector<String[]>();
    Vector<String> columnNames = new Vector<String>();
    Statement stmt = null;      
    try {
      stmt = conn.createStatement();
      ResultSet rs = stmt.executeQuery(searchTerm);
      while(rs.next()){
          rowResult = new String[13];

          String currentId= rs.getString("CurrentId");
          String manufacturer = rs.getString("Constructor");
          String type = rs.getString("ACType");
          String series = rs.getString("Series");
          String index = rs.getString("KeyNo");
          String operator = rs.getString("Operator");
          String baseCountry = rs.getString("Home_Country");
          String baseAirport = rs.getString("Home_Airfield");
          String cn = rs.getString("Con");
          String lineNo = rs.getString("LineNum");
          String hex = rs.getString("Hexcode");
          String selcal=rs.getString("Selcal");
          String acName = rs.getString("ACName");

          rowResult[0] = (currentId);
          rowResult[1] = (manufacturer);
          rowResult[2] = (type);
          rowResult[3] = (series);
          rowResult[4] = (operator);
          rowResult[5] = (baseCountry);
          rowResult[6] = (baseAirport);
          rowResult[7] = (cn);
          rowResult[8] = (lineNo);
          rowResult[9] = (hex);
          rowResult[10] = (selcal);
          rowResult[11] = (acName);
          rowResult[12]= (index);
          result.add(rowResult);

      }

    columnNames.add("Reg.");
    columnNames.add("Manufacturer");
    columnNames.add("Type");
    columnNames.add("Series");
    columnNames.add("Operator");
    columnNames.add("Home Country");
    columnNames.add("Home Airfield");
    columnNames.add("C/N");
    columnNames.add("Line #");
    columnNames.add("Hex");
    columnNames.add("Selcal");
    columnNames.add("Aircraft Name");
    columnNames.add("");





      rs.close();
      stmt.close();


    //Convert from List<String[]> to a suitable vector for  resultTable... Help!!!


  DefaultTableModel resultTable = new DefaultTableModel(rows, columnNames);
  return resultTable;

    }

嗨!我正在尝试使用此方法返回一个 DefaultTableModel 以在 JTable 上使用。我正在努力将从数据库中提取的数据格式化为模型友好的格式。放轻松,这是我进行任何类型编程的第三天!

提前致谢:)

【问题讨论】:

    标签: java arrays swing vector defaulttablemodel


    【解决方案1】:
    1. 您可以使用ResultSetMetaData ← API 链接动态获取列标题

      ResultSetMetaData rsMeta = resultSet.getMetaData();
      int numberOfCols = rsMeta.getColumnCount();
      Vector<String> columnNames = new Vector<>();   // your columns names
      for (int i = 1; i <= numberOfCols; i++ ){
          columnsNames.add(rsMeta.getColumnName(i));
      }
      
    2. 您不需要额外的VectorList 来存储数据。只需首先使用构造函数参数( Vector/Object[] colNames, int rows) 声明您的DefaultTableModel。然后只需使用DefaultTableModel中的方法addRow

      DefaultTableModel model = new DefaultTableModel(columnNames, 0);
      
      while (resultSet.next()) {
          String data1 = resultSet.getString(1);
          String data2 = resultSet.getString(2);
          ...
          Object[] rowData = new Object[] { data1, data2, ... };
          model.addRow(rowData);
      }
      
      return model;
      
    3. 或者,为了确保您获得正确的列数,您可以在 while 循环中使用 Vector 并循环遍历列数据,而不是 2.。

      DefaultTableModel model = new DefaultTableModel(columnNames, 0);
      
      while (resultSet.next()) {
          Vector<String> row = new Vector<>();
          for (int i = 1; i <= numberOfCols; i++) {
              row.add(resultSet.getString(i));
          }
          model.addRow(row);
      }
      
      return model;
      

    更多方法和构造函数见DefaultTableModel API

    【讨论】:

    • 感谢@peeskillet,它似乎在我没有收到错误的意义上起作用。我现在的下一个问题是:在定义了我的 Jtable 的类上,我为其分配了一个空的 DefaultTableModel(为简单起见为 tableModel),然后我运行此方法并执行 tableModel = returnModelFromThisMethod。我的理解是表格现在应该刷新并显示我的方法的结果,对吗?原谅我的无知,但我边走边学。这是否足够或者我需要某种表监听器?
    • 不,你应该做的是声明一个不同的表模型。 DefaultTableModel model2 = localQuery(...);然后设置表的型号..table.setModel(model2);
    • 它工作!!!!它还活着!!!哈哈,你太棒了@peeskillet。对于像我这样无知的新手来说,这是一个令人难以置信的网站。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多