2014-04-25 45 views
0

所以我想讓我的程序讀取一個txt文件中的行列表。然後顯示在JTextArea中。用戶可以使用JTextField輸入數據,目標是如果用戶匹配JArea中的文本和「錯誤!」,則顯示「Hooray」。如果他們不這樣做。任何幫助表示讚賞。JTextArea ArrayList字符串數據和JTextField輸入數據不匹配

public class TextArea1 { 

    JTextArea text; 
    JFrame frame; 
    JTextField textField; 
    public int k; 
    public ArrayList aList; 
    public String correctAnswer; 

    public static void main(String[] args) { 
     TextArea1 gui = new TextArea1(); 

     gui.go(); 
    } 

    private String textLine; 

    public void go() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     textField = new JTextField(""); 
     textField.addActionListener(new startTextFieldListener("correct answer")); 
     JButton startButton = new JButton("Start!"); 
     startButton.addActionListener(new startButtonListener(aList)); 


     text = new JTextArea(30, 60); 
     text.setLineWrap(true); 

     JScrollPane scroller = new JScrollPane(text); 
     scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

     panel.add(scroller); 

     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.getContentPane().add(BorderLayout.WEST, startButton); 
     frame.getContentPane().add(BorderLayout.SOUTH, textField); 
     frame.setSize(350, 300); 
     frame.setVisible(true); 
    } 


    class startButtonListener implements ActionListener { 
     ArrayList aList; 

     startButtonListener(ArrayList passedInList) { 
      aList = passedInList; 
     } 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      String fileName = "test.txt"; 
      String line; 
      ArrayList aList = new ArrayList(); 

      try { 
       try (BufferedReader input = new BufferedReader(new FileReader(fileName))) { 
        if (!input.ready()) { 
         throw new IOException(); 

        } 

        while ((line = input.readLine()) != null) { 
         aList.add(line); 
        } 
       } 
      } catch (IOException e) { 
       System.out.println(e); 

      } 

      int sz = aList.size(); 

      for (int k = 0; k < sz; k++) { 

       String correctAnswer = aList.get(k).toString(); 

       text.append(aList.get(k).toString()); 
       text.append("\n"); 
      } 
     } 
    } 

    class startTextFieldListener implements ActionListener { 
     String correctAnswer; 

     startTextFieldListener(String answer) { 
      correctAnswer = answer; 
     } 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      if (text.getText().equals(correctAnswer)) { 
       JOptionPane.showMessageDialog(null, "Hooray!"); 
      } else { 
       JOptionPane.showMessageDialog(null, "Wrong!"); 
      } 

     } 
    } 
} 
+0

那麼問題在哪裏? – mok

+0

現在,即使我匹配顯示在JArea上的文本,它也不會顯示正確的消息DIalog – user3100858

+0

您是否運行檢查它們是否匹配的操作? – DonyorM

回答

0

好試試這個:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 

public class TextArea1{ 
    JTextArea text; 
    JFrame frame; 
    JTextField textField; 
    public int k; 
    public ArrayList aList; 
    public String correctAnswer; 

    public static void main (String [] args) { 
     TextArea1 gui = new TextArea1(); 

     gui.go(); 
    } 
    private String textLine; 

    public void go() { 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     textField = new JTextField(""); 
     JButton startButton = new JButton ("Start!"); 
     startButton.addActionListener(new startButtonListener()); 


     text = new JTextArea (30, 60); 
     text.setLineWrap(true); 

     JScrollPane scroller = new JScrollPane(text); 
     scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

     panel.add(scroller); 

     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.getContentPane().add(BorderLayout.WEST, startButton); 
     frame.getContentPane().add(BorderLayout.SOUTH, textField);  
     frame.setSize(350, 300); 
     frame.setVisible(true); 
    }  

    class startButtonListener implements ActionListener { 
    ArrayList aList; 
     public void actionPerformed(ActionEvent event) { 
      String fileName = "test.txt"; 
      String line; 
      ArrayList <String>aList = new ArrayList<>(); 

      try { 
       try (BufferedReader input = new BufferedReader (new FileReader(fileName))) { 
        if (!input.ready()) { 
         throw new IOException(); 

        } 

        while ((line = input.readLine()) !=null) { 
         aList.add(line); 
        } 
       } 
      } catch (IOException e) { 
       System.out.println(e); 

      } 
      int sz = aList.size(); 
      boolean result=false; 
      for(String t:aList){ 
      if (t.equalsIgnoreCase(textField.getText())) { 
        JOptionPane.showMessageDialog(null, "Hooray! Loading File contents...."); 
        int count=0; 
        for (int k = 0; k< sz; k++) {   
         text.append(aList.get(k).toString()); 
         System.out.println(count); 
         count++; 
         // if(k<sz-1) 
         // text.append(", "); 
         text.append("\n"); 
        } 
        result=true; 
        break; 
       } 

       else { 
        result=false; 
       } 
      } 
      if(!result){ 
       JOptionPane.showMessageDialog(null, "Wrong!"); 
      } 
     } 
    }  
} 

在這個它會尋找你的文字在文本框輸入,如果它匹配它會被行添加整個文件內容一致。我已經測試過了。但請記住我沒有足夠的時間,所以我沒有完成正則表達式模式匹配,它與您的文本文件中的一行簡單平等地進行比較,並且正好在文本框中輸入文本。

0

小錯誤,你每次追加到textarea的時候添加新行..這爲什麼它不因額外的新行

比較,如果你有新的生產線在你的文件沒有問題ArrayList中在解析文件時已經存在,因此不需要添加新行。

解決方案:

public class TextArea1{ 

JTextArea text; 
JFrame frame; 
JTextField textField; 
public int k; 
public String correctAnswer; 

public static void main (String [] args) { 
    TextArea1 gui = new TextArea1(); 

    gui.go(); 
} 
private String textLine; 

public void go() { 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel = new JPanel(); 
    textField = new JTextField(""); 
    //textField.addActionListener(new startTextFieldListener("correct answer")); 
    JButton startButton = new JButton ("Start!"); 
    startButton.addActionListener(new startButtonListener()); 


    text = new JTextArea (30, 60); 
    text.setLineWrap(true); 

    JScrollPane scroller = new JScrollPane(text); 
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

    panel.add(scroller); 

    frame.getContentPane().add(BorderLayout.CENTER, panel); 
    frame.getContentPane().add(BorderLayout.WEST, startButton); 
    frame.getContentPane().add(BorderLayout.SOUTH, textField);  
    frame.setSize(350, 300); 
    frame.setVisible(true); 
}  



class startButtonListener implements ActionListener { 
ArrayList aList; 
startButtonListener() 
{ 

} 

public void actionPerformed(ActionEvent event) { 
    String fileName = "test.txt"; 
    String line; 
    String string = ""; 

    try { 
     try (BufferedReader input = new BufferedReader (new FileReader(fileName))) { 
      if (!input.ready()) { 
       throw new IOException(); 

      } 

      while ((line = input.readLine()) !=null) { 
       string += line; 
       //aList.add(line); 
      } 
      System.out.println("List ready to check. values in list are :"+aList); 
     } 
    } catch (IOException e) { 
     System.out.println(e); 

    } 
     if (string.equals(textField.getText())) { 

      JOptionPane.showMessageDialog(null, "Hooray!"); 
     } 

     else { 
      JOptionPane.showMessageDialog(null, "Wrong!"); 
     }   
    } 
}  
} 
+0

我已經嘗試過,但沒有奏效。 Ty不管輸入。 – user3100858

+0

@ user3100858你想比較的文件和文本框的權利,我可以知道什麼是在文件內,所以我可以測試它 –

+0

是的,這是正確的。這就是txt文件中的內容:那麼你的大腦對所遇到的所有常規,普通,普通的事情都做了什麼? – user3100858

0

嗯,我剛纔修改你的代碼,這樣你會得到正確的消息,當值包含在列表中。相應地查看和修改。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 

public class TextArea1{ 

JTextArea text; 
JFrame frame; 
JTextField textField; 
public int k; 
public String correctAnswer; 

public static void main (String [] args) { 
    TextArea1 gui = new TextArea1(); 

    gui.go(); 
} 
private String textLine; 

public void go() { 
    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel panel = new JPanel(); 
    textField = new JTextField(""); 
    //textField.addActionListener(new startTextFieldListener("correct answer")); 
    JButton startButton = new JButton ("Start!"); 
    startButton.addActionListener(new startButtonListener()); 


    text = new JTextArea (30, 60); 
    text.setLineWrap(true); 

    JScrollPane scroller = new JScrollPane(text); 
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

    panel.add(scroller); 

    frame.getContentPane().add(BorderLayout.CENTER, panel); 
    frame.getContentPane().add(BorderLayout.WEST, startButton); 
    frame.getContentPane().add(BorderLayout.SOUTH, textField);  
    frame.setSize(350, 300); 
    frame.setVisible(true); 
}  



class startButtonListener implements ActionListener { 
ArrayList aList; 
startButtonListener() 
{ 

} 

public void actionPerformed(ActionEvent event) { 
    String fileName = "test.txt"; 
    String line; 
    ArrayList aList = new ArrayList(); 

    try { 
     try (BufferedReader input = new BufferedReader (new FileReader(fileName))) { 
      if (!input.ready()) { 
       throw new IOException(); 

      } 

      while ((line = input.readLine()) !=null) { 
       aList.add(line); 
      } 
      System.out.println("List ready to check. values in list are :"+aList); 
     } 
    } catch (IOException e) { 
     System.out.println(e); 

    } 
     if (aList.contains(text.getText())) { 
      JOptionPane.showMessageDialog(null, "Hooray!"); 
     } 

     else { 
      JOptionPane.showMessageDialog(null, "Wrong!"); 
     }   
    } 
}  
}  

如果這是正確的,那麼標記爲正確。

+0

謝謝您的輸入。我試着運行你的代碼,但每當我按下開始按鈕時,它將顯示「hooray」,而不是將txt文件數據加載到JTextArea中。 – user3100858

+0

實際上,我已經爲您保留了該代碼。如果你想我可以爲你做。但我會建議你自己做。所以你會知道它是如何工作的。 –

+0

如果你能爲我做,我將不勝感激。這是爲了今天的一個學校項目,但我會盡我所能去理解它爲什麼起作用。 – user3100858