Java - JTable 仅显示 txt 文件的最后一行
Java - JTable show only last line from txt file
我有这样的 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);
当然,我想显示每一行,但它看起来像这样......:
我想问题出在 for 循环的某个地方...
这是因为您在每次迭代时都用所有受试者填充数据
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();
}
我有这样的 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);
当然,我想显示每一行,但它看起来像这样......:
我想问题出在 for 循环的某个地方...
这是因为您在每次迭代时都用所有受试者填充数据
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();
}