Java - JTable仅显示来自txt文件的最后一行

时间:2017-09-10 20:13:34

标签: java swing jtable text-files

我有这样的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

我认为问题出现在for循环......

1 个答案:

答案 0 :(得分: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();
}