2017-09-10 80 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