2011-09-07 4 views
1

검색 버튼을 작성하려고합니다. 검색 버튼을 클릭하면 (자), JComponent outTextArea의 텍스트가 읽 힙니다.스캔, 문자열 및 텍스트 영역의 문제

각 단어를 읽고 각 검색 단어와 내가 검색하고있는 단어를 비교합니다. 내 문제는, 일하는거야. outTextArea에서 마지막 단어 만 읽습니다.

는 코드

if(e.getActionCommand().equals("Search")) 
    { 
     String strSearchString = searchTextField.getText(); 
     System.out.println(strSearchString); 

     String text = outTextArea.getText(); 
     System.out.println(text); 

     Scanner sc = new Scanner(text); 


     while(sc.hasNext() == true) 
     { 
      String s = sc.next(); 

      if (s.equals(strSearchString) == true) 
      { 
       searchOutLabel.setText("Yes"); 
      } 

      else 
      { 
       searchOutLabel.setText("Non!"); 
      } 

     } 
     sc.close(); 


    } 

나는 틈을 추가하는 경우입니다; 그 후에는 첫 단어를 검색합니다. 그래서 그것은 내 논리가 다소 결점이 있어야하며 이렇게 할 수 없다고 말해줍니다.

답변

1

문제는 모든 단어의 레이블 텍스트를 설정하지만 그렇게 빨리 읽을 수는 없기 때문입니다. 천천히하고 싶다면 스윙 타이머와 같은 루프를 느리게하기 위해 무언가를 사용해야합니다. 또한 필요하지

if (suchAndSuch == true) 

클리너는 단순히해야 할 일에 대한

if (suchAndSuch) 

예를 들면 : 당신이 어떤 일치하는 경우 예 인쇄하려면

if (e.getActionCommand().equals("Search")) { 
    final String strSearchString = searchTextField.getText(); 
    System.out.println(strSearchString); 
    String text = outTextArea.getText(); 
    System.out.println(text); 
    final Scanner sc = new Scanner(text); 
    int timerDelay = 2 * 1000; 

    new Timer(timerDelay, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (sc.hasNext()) { 
       String s = sc.next(); 
       if (s.equals(strSearchString)) { 
       searchOutLabel.setText("Yes"); 
       } else { 
       searchOutLabel.setText("Non!"); 
       } 
      } else { 
       ((Timer)e.getSource()).stop(); 
       sc.close(); 
      } 
     } 
    }).start(); 
    } 

편집 한

텍스트 필드를 설정하기 위해 로직을 변경해야합니다. if 일치하는 것이 있으면 메소드를 종료하십시오.

 while (sc.hasNext()) { 
     String s = sc.next(); 
     if (s.equals(strSearchString)) { 
      searchOutLabel.setText("Yes"); 
      sc.close(); 
      return; 
     } 
    } 
    searchOutLabel.setText("Non!");   
    sc.close(); 
+0

아니요, 그건 제가 생각한 것이 아닙니다. TextArea에서 스캔 한 전체 텍스트를 확인하고 싶습니다. 그리고 나는 다른 TextField에 입력 한 검색된 단어가 스캔 한 텍스트에 있는지 알고 싶습니다. 그것이 "예"이면 "아니오"가 아닙니다. –

+0

아, 그러면 논리가 꺼져 있습니다. 각 단어를 확인하고 그렇게 빨리 할 것입니다. 거짓이 발생하면 루프를 빠져 나가야합니다. 간단합니다. –

+0

@NoCanDo : 편집 –

2
String s = sc.next(); //Change to 
String s = sc.nextLine(); 

이 마찬가지로 또한 당신의 if truebreak statement를 추가

sc.hasNext(); to 
sc.hasNextLine(); 

을 변경 : 일치하는 (당신이 while 루프의 끝에 도달했습니다) 발견되지 않는 경우,이 라벨을 설정 성명서. 이같이

if (s.equals(strSearchString) == true) 
{ 
    searchOutLabel.setText("Yes"); 
    break; 
} 

else 
{ 

그러면 여러분의 형식 설정에 대해 의견을 말해야합니다. 나를 행복하게 만들고 위와 같이 작성하십시오.

if (s.equals(strSearchString)) { 
    searchOutLabel.setText("Yes"); 
    break; 
} else { 
+0

정답 : 1+ –

관련 문제