2014-11-17 134 views
-2

我的代碼讀取人員列表併爲他們搜索互聯網。 出於某種原因,我不能以正確的順序導航。我第一次按下我的「返回」按鈕時,它總是會進一步,而只有第二次按鈕會使得它應該是。通過ArrayLists導航

代碼編輯

遺憾的英語不好,這是我整個代碼:

import java.awt.BorderLayout; 
import java.awt.event.*; 
import java.io.*; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.*; 

import javax.swing.*; 

public class MainGui { 
    private JTextField counter; 
    private JFrame frame; 
    private ArrayList<Gast> gastListe; 
    private int aktuellerGastIndex; 
    String vorname; 
    String nachname; 
    String city; 
    String firma; 

    public static void main(String[] args) { 
     MainGui gui = new MainGui(); 
     gui.los(); 
    } 

    public void los() { 
     frame = new JFrame("Arrival LookAPP v1.2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel mainPanel = new JPanel(); 
     JPanel textPanel = new JPanel(); 
     counter = new JTextField(); 
     counter.setText("00/00");  
     JButton vorherigerGast = new JButton("<"); 
     vorherigerGast.addActionListener(new VorherigerGastListener()); 
     JButton nächsterGast = new JButton(">"); 
     nächsterGast.addActionListener(new NächsterGastListener()); 
     gastListe = new ArrayList<Gast>(); 
     textPanel.add(counter); 
     textPanel.add(vorherigerGast); 
     textPanel.add(nächsterGast); 
     JMenuBar menüleiste = new JMenuBar(); 
     JMenu menüDatei = new JMenu("Datei"); 
     JMenuItem menüPunktLaden = new JMenuItem("Laden"); 
     menüPunktLaden.addActionListener(new MenüLadenListener()); 
     menüDatei.add(menüPunktLaden); 
     menüleiste.add(menüDatei); 
     frame.setJMenuBar(menüleiste); 
     frame.getContentPane().add(BorderLayout.CENTER, mainPanel); 
     frame.getContentPane().add(BorderLayout.SOUTH, textPanel); 
     frame.setSize(750,130); 
     frame.setAlwaysOnTop(true); 
     frame.setVisible(true); 
    } 

    public String countIt() { 
     String c1 = String.valueOf(aktuellerGastIndex); 
     String c2 = String.valueOf(gastListe.size()); 
     String c = c1 + "/" + c2; 
     return c; 
    } 

    public class MenüLadenListener implements ActionListener { 
     public void actionPerformed(ActionEvent ev) { 
      JFileChooser dateiÖffnen = new JFileChooser(); 
      dateiÖffnen.setCurrentDirectory(new File("//T:/Rezeption/Night Auditor/Arrival LookApp/export")); 
      dateiÖffnen.showOpenDialog(frame); 
      try { 
       dateiLaden(dateiÖffnen.getSelectedFile()); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 


    public class VorherigerGastListener implements ActionListener { 
     public void actionPerformed(ActionEvent ev) { 
      vorherigenGastZeigen(); 
      counter.setText(countIt()); 
     } 
    } 

    public class NächsterGastListener implements ActionListener { 
     public void actionPerformed(ActionEvent ev) { 
      nächstenGastZeigen(); 
      counter.setText(countIt()); 
     } 
    } 

    public void nächstenGastZeigen() { 
     if (aktuellerGastIndex < gastListe.size()){ 
      aktuellerGast = gastListe.get(aktuellerGastIndex); 
      aktuellerGastIndex++; 
      System.out.println(aktuellerGastIndex + "/" + gastListe.size()); 
     } 
    } 

    public void vorherigenGastZeigen() { 
     if (aktuellerGastIndex < gastListe.size()){ 
      aktuellerGast = gastListe.get(aktuellerGastIndex); 
      System.out.println(aktuellerGastIndex); 
      aktuellerGastIndex--; 
     } 
    } 

    private void dateiLaden(File datei) { 
     aktuellerGastIndex = 0; 
     gastListe = new ArrayList<Gast>(); 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(datei)); 
      String zeile = null; 
        while ((zeile = reader.readLine()) != null) { 
         gastErstellen(zeile); 
        } 
        reader.close(); 
     } catch(Exception ex) { 
      System.out.println("konnte Karte nicht lesen"); 
      ex.printStackTrace(); 
     } 
     nächstenGastZeigen(); 
     counter.setText(countIt()); 
    } 

    private void gastErstellen(String zuParsendeZeile) { 
     String[] ergebnis = zuParsendeZeile.split("\""); 
     vorname= ""; 
     nachname=""; 
     city=""; 
     firma=""; 
     try { 
      vorname = ergebnis[1].toString(); 
      if (vorname.indexOf(" ") == -1) { 
      } else { 
       int io; 
       while(vorname.indexOf(" ") != -1) { 
        io = vorname.indexOf(" "); 
        vorname = vorname.substring(0,io) +"+"+ vorname.substring(io+1, vorname.length()); 
       } 
      } 
     } catch (Exception e1) {} 

     try { 
      nachname = ergebnis[3].toString(); 
      if (nachname.indexOf(" ") == -1) { 
      } else { 
       int io; 
       while(nachname.indexOf(" ") != -1) { 
        io = nachname.indexOf(" "); 
        nachname = nachname.substring(0,io) +"+"+ nachname.substring(io+1, nachname.length()); 
       } 
      } 
     } catch (Exception e1) {} 

     try { 
      city = ergebnis[5].toString(); 
      if (city.indexOf(" ") == -1) { 
      } else { 
       int io; 
       while(city.indexOf(" ") != -1) { 
        io = city.indexOf(" "); 
        city = city.substring(0,io) +"+"+ city.substring(io+1, city.length()); 
       } 
      } 
     } catch (Exception e) {} 

     try { 
      firma = ergebnis[7].toString(); 
      if (firma.indexOf(" ") == -1) { 
      } else { 
       int io; 
       while(firma.indexOf(" ") != -1) { 
        io = firma.indexOf(" "); 
        firma = firma.substring(0,io) +"+"+ firma.substring(io+1, firma.length()); 
       } 
      } 
     } catch (Exception e) {} 
     Gast gast = new Gast(vorname, nachname, city, firma); 
     gastListe.add(gast); 
    } 
} 
+0

是否有可能您的偵聽器被調用兩次按鈕和按鈕事件? – gerrytan

+0

請儘量將您的代碼降低到重要的水平。見[mcve](http://stackoverflow.com/help/mcve)和[sscce](http://sscce.org/) – AbcAeffchen

+0

對不起,我的第一篇文章,我會記住它爲我的下一個.. –

回答

0

openWebpage()被調用時,aktuellerGast的內容是空值。

+0

openWebPage()工作正常,我只是無法設法正確倒退時,VorherigerGastListener調用vorherigenGastZeigen(); 它以某種方式向前跳躍,而不是每次第一次點擊時都返回。該指數顯示正確的數字......但它一直向前跳躍 –