2017-09-10 14 views
-3

私はTXT、このようなファイルがあります:のJava - 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); 

、私はすべての単一の行を表示したいが、それはだ、このようになります...:私はこの問題は、Sであることをsuppse enter image description here

omewhere forループと...

+0

ループのためのあなたのネストされたが、意味をなさないでなければなりません。なぜあなたはこれをやっている? –

+0

(1-)なぜあなたは提案を聞くのがとても難しいですか?参照:https://stackoverflow.com/questions/46122350/java-how-to-fill-jtable-from-text-file#comment79252592_46122350(同じアドバイスを与える別の質問も削除しました)、単純な提案は、 addRow(...)メソッドを使用して、TableModelにArrayを追加します。 _ループ内に2つのステートメントがあります!_ – camickr

+0

これで、データを配列に分割しています。次に、すべてのデータをカスタムオブジェクトにコピーします。次に、ArrayListを反復処理し、カスタムオブジェクトからデータを取り出して2D配列に追加します。次に、DefaultTableModelを作成します。 DefaultTableModelは、ArrayからVectorのVectorにデータをコピーします。不要な複雑なコードと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

関連する問題