2017-09-10 86 views
-3

我有這樣的txt文件:爪哇 - JTable中顯示從txt文件只有最後一行

User User 1||Address1|telephonecall|X|drivingdepartment|vehicle|X 
User User 2||Address2|telephonecall|X|drivingdepartment|vehicle|X 
User User 3||Address3|telephonecall|X|drivingdepartment|vehicle|X 
User User 4||Address4|telephonecall|X|drivingdepartment|vehicle|X 

我試圖表明它的JTable這樣的,但它是隻顯示最後一行4次(多達有多少行是文本文件)

public ArrayList<Voznje> ucitajVoznje() { 
     ArrayList<Voznje> zakazaneVoznje = new ArrayList<Voznje>(); 
     try { 
      File voznjeFile = new File("src/txt/voznje"); 
      BufferedReader br = new BufferedReader(new FileReader(voznjeFile)); 
      String line = null; 
      while ((line = br.readLine()) != null) { 
       String[] split = line.split("\\|"); 
       String imePrezimeMusterije = split[0]; 
       String datumPolaska = split[1]; 
       String adresaPolaska = split[2]; 
       String nacinPorudzbine = split[3]; 
       String vozac = split[4]; 
       String dispecer = split[5]; 
       String vrstaVozila = split[6]; 
       String napomena = split[7]; 

       Voznje novaVoznja = new Voznje(imePrezimeMusterije, datumPolaska, adresaPolaska, nacinPorudzbine, vozac, dispecer, vrstaVozila, napomena); 
       zakazaneVoznje.add(novaVoznja); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     //System.out.println(zakazaneVoznje); 
     return zakazaneVoznje; 
    } 
private void initGUI() { 
     ArrayList<Voznje> zakazaneVoznje = ucitajVoznje(); 
     String[] zaglavlje = new String[] {"Musterija", "Datum", "Adresa", "Rezervacija", "Vozac", "Dispecer", "Vrsta vozila", "Napomena"}; 
     Object[][] prikaz = new Object[zakazaneVoznje.size()][zaglavlje.length];  
     int a = 0; 
     for (int i = 0; i < zakazaneVoznje.size(); i++){ 
      for (Voznje v : zakazaneVoznje) { 
       prikaz[i][0] = v.getImePrezimeMusterije(); 
       prikaz[i][1] = v.getDatumPolaska(); 
       prikaz[i][2] = v.getAdresaPolaska(); 
       prikaz[i][3] = v.getNacinPorudzbine(); 
       prikaz[i][4] = v.getVozac(); 
       prikaz[i][5] = v.getDispecer(); 
       prikaz[i][6] = v.getVrstaVozila(); 
       prikaz[i][7] = v.getNapomena(); 

      } 
     } 

     DefaultTableModel tableModel = new DefaultTableModel(prikaz,zaglavlje); 
     tblVoznje = new JTable(tableModel); 
     tblVoznje.setRowSelectionAllowed(true); 
     tblVoznje.setColumnSelectionAllowed(true); 
     tblVoznje.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     tblVoznje.setDefaultEditor(Object.class, null); 

     JScrollPane tableScroll = new JScrollPane(tblVoznje); 
     add(spSkrol); 
     add(tbTulbar, BorderLayout.NORTH); 
     add(tableScroll, BorderLayout.CENTER); 

當然,我想告訴每一行,但它看起來像這樣...: enter image description here

我suppse,問題是S omewhere與環...

+0

你的嵌套的for循環就沒有任何意義。你爲什麼做這個? –

+0

(1-)爲什麼你很難聽到建議?請參閱:https://stackoverflow.com/questions/46122350/java-how-to-fill-jtable-from-text-file#comment79252592_46122350(你也刪除了另一個問題給出相同的建議),簡單的建議是分裂並使用addRow(...)方法將數組添加到TableModel。 _這是循環內的兩條語句!!! _ – camickr

+0

現在您正在將數據拆分成一個數組。然後,您將所有數據複製到自定義對象。然後,您遍歷ArrayList並從自定義對象中獲取數據並將其添加到2D數組中。然後你創建DefaultTableModel。然後DefaultTableModel將把數組中的數據複製到矢量矢量中。您有不必要的複雜代碼以及4份數據副本。 – camickr

回答

3

它,因爲你與所有受試者在每次迭代

for (int i = 0; i < zakazaneVoznje.size(); i++){ 
    for (Voznje v : zakazaneVoznje) { // HERE IS THE MISTAKE 
     prikaz[i][0] = v.getImePrezimeMusterije(); 
     prikaz[i][1] = v.getDatumPolaska(); 
     prikaz[i][2] = v.getAdresaPolaska(); 
     prikaz[i][3] = v.getNacinPorudzbine(); 
     prikaz[i][4] = v.getVozac(); 
     prikaz[i][5] = v.getDispecer(); 
     prikaz[i][6] = v.getVrstaVozila(); 
     prikaz[i][7] = v.getNapomena(); 

    } 
} 

盡顯你的數據應該是

for (int i = 0; i < zakazaneVoznje.size(); i++){ 
    Voznje v=zakazaneVoznje.get(i) 
     prikaz[i][0] = v.getImePrezimeMusterije(); 
     prikaz[i][1] = v.getDatumPolaska(); 
     prikaz[i][2] = v.getAdresaPolaska(); 
     prikaz[i][3] = v.getNacinPorudzbine(); 
     prikaz[i][4] = v.getVozac(); 
     prikaz[i][5] = v.getDispecer(); 
     prikaz[i][6] = v.getVrstaVozila(); 
     prikaz[i][7] = v.getNapomena(); 
} 
+0

那麼這可能會解決問題,但真正的問題是代碼的糟糕結構和所有不必要的循環。我希望OP能花點時間閱讀我的意見。 – camickr