2014-04-18 60 views
0

我試着從一個文本文件的一些數據導入到我的JTable .. 我寫了一些代碼來做到這一點:閱讀文本文件到JTable中

JMenuItem Open = new JMenuItem("Open gegevens"); 
    Open.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 


      readTXT(); 


     } 
    }); 

    mnNewMenu.add(Open); 

public void readTXT(){ 



      try{  
       String readLine = null; 
       File file = new File("Resultaten.txt"); 
       FileReader reader = new FileReader(file); 
       BufferedReader bufReader = new BufferedReader(reader); 

       while((readLine = bufReader.readLine()) != null) { 
        String[] splitData = readLine.split("; "); 
        System.out.println(splitData.length); 
        String match= splitData[0]; 
        String set= splitData[1]; 
        String spelertje1= splitData[2]; 
        String gamesspeler1= splitData[3]; 
        String streep= splitData[4]; 
        String gamesspeler2= splitData[5]; 
        String spelertje2= splitData[6]; 
        String setwinnaartje= splitData[7]; 
        String matchwinnaartje= splitData[8]; 

        model.addRow(new Object[] { match,set, spelertje1, gamesspeler1, 
          streep, gamesspeler2, spelertje2, setwinnaartje, matchwinnaartje }); 
        System.out.println("okidokii"); 

       } 



       reader.close(); 
      } 
      catch(IOException e){ 
       JOptionPane.showMessageDialog(null, "Error"); 
     e.printStackTrace(); 

      } 


    } 

在我看來這應該工作,但還沒有我得到這個:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 
    at TennisKlassement.readTXT(TennisKlassement.java:888) 
    at TennisKlassement$14.actionPerformed(TennisKlassement.java:807) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.AbstractButton.doClick(AbstractButton.java:389) 
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809) 
    at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:137) 
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850) 
    at java.awt.Component.processMouseEvent(Component.java:6414) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) 
    at java.awt.Component.processEvent(Component.java:6179) 
    at java.awt.Container.processEvent(Container.java:2084) 
    at java.awt.Component.dispatchEventImpl(Component.java:4776) 
    at java.awt.Container.dispatchEventImpl(Container.java:2142) 
    at java.awt.Component.dispatchEvent(Component.java:4604) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4279) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4209) 
    at java.awt.Container.dispatchEventImpl(Container.java:2128) 
    at java.awt.Window.dispatchEventImpl(Window.java:2492) 
    at java.awt.Component.dispatchEvent(Component.java:4604) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:717) 
    at java.awt.EventQueue.access$400(EventQueue.java:82) 
    at java.awt.EventQueue$2.run(EventQueue.java:676) 
    at java.awt.EventQueue$2.run(EventQueue.java:674) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:690) 
    at java.awt.EventQueue$3.run(EventQueue.java:688) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:687) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

其實我明白這個問題..絃樂splitdata只有一個字符串來容納。但我intialised它白衣分割方法..

我txtfiles看起來是這樣的:

enter image description here

這是我以前寫的代碼我JTable中txtfile:

public void writeTXT(){ 
      try { 


      File file = new File("Resultaten.txt"); 

       PrintWriter os = new PrintWriter(file); 
       System.out.println(os); 
       os.println(""); 




       for (int row = 0; row < table.getRowCount(); row++) { 


        for (int col = 0; col < table.getColumnCount(); col++) { 
         //os.print(table.getColumnName(col)); 
         os.print(";"); 
         os.print(table.getValueAt(row, col) + "\t") 

         System.out.println("ok"); 

        } 

        os.println(""); 
       } 
       os.close(); 
       System.out.println("Done!"); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 

     } 


     } 

對於你的知識,使用這種方法時jtable沒有什麼事......

感謝您的好評

+0

請添加代碼,包括'TennisKlassement.readTXT' – mok

+0

請在這裏請 – VanpeltJ

+0

在第一個while循環中添加'System.out.println(splitData.length)',並請報告結果。 – mok

回答

0

String splitdata只有一個字符串。但我初始化它白衣分裂的方法..

那麼,爲什麼你粘貼所有代碼相關的表?您的問題是將文本拆分爲令牌。

根據你的代碼,它看起來像你寫了一個semi-colon and a tab character,但它看起來像拆分使用semi-colon and a space character,所以你沒有得到你期望的令牌。

你可以寫一個簡單的SSCCE來測試這一點:

公共類主要

{ 
    public static void main(String[] args) 
    { 
     String text = ";\tone;\ttwo;\tthree;\tfour"; 

     for (String word: text.split("; ")) 
//  for (String word: text.split(";\t")) 
      System.out.println(word); 
    } 
} 

在您發表的問題只發布的相關信息,瞭解問題。

+0

那實際上幫了大忙!現在沒有線程了,readLine被分割成了字符串,但是我的jTable中沒有任何東西出現..似乎真的很奇怪 – VanpeltJ

0

根據異常和您的代碼似乎splitData的長度小於9

編輯:(由於OP接受第一部分)

確保您的文件劃界「 ;」並具有所需的長度。

+0

它似乎是正確的..我添加了我用來寫我的Jtable的代碼到txt文件 – VanpeltJ

+0

更簡單的方法是隻需通過眼睛檢查txt文件。 – mok

+0

是的,我做到了,但我的程序用來寫jtable到一個txt文件,所以它可以在打開程序時恢復它。就像一個數據庫的簡單方法 – VanpeltJ