2011-04-10 5 views
0

GUI로 만든 JTextArea의 텍스트 파일에서 정보를 표시하려고합니다. 파일에서 JTextArea로 정보를 가져 오는 방법을 알아 냈습니다.하지만 파일의 마지막 줄만 잡고 있습니다. 모든 라인을 표시해야합니다. 루프를 계속 바꾸지 만이 것을 파악할 수는 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. 여기에 내 코드를 살펴입니다 : 코드에서FileReader를 사용하면 마지막 줄의 텍스트 파일 만 표시됩니까?

public TextArea() { 
    initComponents(); 


    try { 
     FileReader one = new FileReader ("info.txt"); 
     BufferedReader buf = new BufferedReader(one); 

     String line = ""; 
     StringTokenizer st = null; 
     int lineNumber = 0, tokenNumber = 0; 
     //textArea.setText(line); 

     while ((line = buf.readLine()) != null) { 
      lineNumber++; 

      //break comma separated line using "," 
      st = new StringTokenizer(line, ","); 

      while (st.hasMoreTokens()) { 
       //display csv values 
       tokenNumber++; 
       line = ("Title: " + st.nextToken() 
         + "\n" + "Make:" + st.nextToken() 
         + "\n" + "Model:" + st.nextToken() 
         + "\n" + "Year:" + st.nextToken() 
         + "\n" + "Price:" + st.nextToken() 
         + "\n" + "Notes:" + st.nextToken() 
         + "\n" + "Details:" + st.nextToken() 
         + "\n"); 

       textArea.setText(line); 
      } 

      //reset token number 
      tokenNumber = 0; 
      //textArea.setText(line); 
     } 

    } catch (FileNotFoundException e) { 
     JOptionPane.showMessageDialog(this, "File not found"); 
    } catch (IOException e){ 
     JOptionPane.showMessageDialog(this, "Data not read"); 
    } 

답변

1

봐 :

while (st.hasMoreTokens()) { 
      //display csv values 
      tokenNumber++; 
      line = ("Title: " + st.nextToken() 
        + "\n" + "Make:" + st.nextToken() 
        + "\n" + "Model:" + st.nextToken() 
        + "\n" + "Year:" + st.nextToken() 
        + "\n" + "Price:" + st.nextToken() 
        + "\n" + "Notes:" + st.nextToken() 
        + "\n" + "Details:" + st.nextToken() 
        + "\n"); 

      textArea.setText(line); 
     } 

매번 당신은 당신이 텍스트 영역의 발은 토큰 발견 Last (마지막)로 설정하는 새로운 토큰을 찾을 수 있습니다. 텍스트 영역에는 마지막 행만 표시됩니다. 당신은 같은 것을 시도 할 수 있습니다 : 당신이 줄 변수를 무시 생각

textArea.setText(textArea.getText() + line); 
+0

와우, 감사합니다. 그것은 트릭을했다. – rjdelight

+0

StringBuilder를 사용하여 모든 라인을 연결하고'while' 루프 외부에서'textArea.setText (stringBuilder.toString())'를 수행하는 것이 더 좋을까요 – RonK

+0

또한 내부 'while' 루프가 문제입니다. 조건은'while (st.hasMoreTokens())'이고 토큰 화 프로그램에서 특정 토큰을 하나씩 띄웁니다. 그러나 정말로 기대하는 것은이 루프가 tokanizer 당 한번 실행된다는 것입니다. 그래서'if'가 while while보다 더 좋을 것입니다. – RonK

0

합니다.

line+=... 

연결하고 루프 외부에 연결된 전체 줄의 값을 설정하십시오.

0
while (st.hasMoreTokens()) { 
      //display csv values 
      tokenNumber++; 
      line = line +"\n"+("Title: " + st.nextToken() 
        + "\n" + "Make:" + st.nextToken() 
        + "\n" + "Model:" + st.nextToken() 
        + "\n" + "Year:" + st.nextToken() 
        + "\n" + "Price:" + st.nextToken() 
        + "\n" + "Notes:" + st.nextToken() 
        + "\n" + "Details:" + st.nextToken() 
        + "\n"); 


     } 
textArea.setText(line);