2013-08-08 2 views
1

클라이언트 측에서 보낸 수정 메시지의 오류를 강조하려고합니다. 그러나 이렇게하면이 알고리즘을 따르지 않습니다. fix 메시지에 문자열이있는 오류가 있으면 전체 문자열을 강조 표시하고 그렇지 않으면 강조 표시되지 않습니다. 기본적으로 내가 묻는 것은 오류가 발생하면 전체 출력을 강조 표시하는 대신 여러 부분을 강조 표시하는 방법입니다. 예를 들어별도로 강조 표시하는 방법

: 내가

no error - unhighlighted 
error - highlighted 
no error - highlighted 
no error - highlighted 
no error - highlighted 
error - highlighted 

납니다 오류가 내가 원하는 :

no error - unhighlighted 
error - highlighted 
no error - unhighlighted 
no error - unhighlighted 
no error - unhighlighted 
error - highlighted 

문제 영역

if(outputLine.equals("No errors")) { 
    tfCSVLine.append(outputLine+"\n\n\n"); 
    lengthH += (inputLine+"\n\n\n").length(); 
} 
else { 
    tfCSVLine.append(outputLine+"\n\n\n"); 
    int pos = inputLine.indexOf(inputLine, 0); 
    int len = lengthH; 
    lengthH += (inputLine+"\n\n\n").length(); 
    h.addHighlight(len, lengthH+(inputLine+"\n\n\n").length(), 
           DefaultHighlighter.DefaultPainter); 
} 

프로그램

Highlighter h = tfFIXMsg.getHighlighter(); 
try {    
    int lengthH = 0; 
    while ((inputLine = in.readLine()) != null) { 
     System.out.println ("Server: " + inputLine); 
     tfFIXMsg.append(inputLine + "\n\n\n"); 

     if (inputLine.trim().equals("Bye.")) { 
      System.out.println("Exit program"); 
      break; 
     } 

     Scanner input1 = new Scanner(new File(csvName)); 
     Scanner input2 = new Scanner(new File(csvName)); 
     Scanner input3 = new Scanner(new File(csvName)); 
     Scanner input4 = new Scanner(new File(csvName)); 

     String csvline = getCsvLineVal(getLocation34CSV(
       getTag34Value(Tag34Location(getTagCSV(parseFixMsg(
        inputLine ,inputLine))), getValueCSV(parseFixMsg(
         inputLine ,inputLine))), getVal34(input1,input2)), 
              getCSVLine(input3, input4)); 
     outputLine = compareClientFixCSV(getTagCSV(parseFixMsg(
       inputLine ,inputLine)), getValueCSV(parseFixMsg(
        inputLine ,inputLine)), getCSVTag(csvline), getCSVValue(csvline)); 

     out.println(outputLine); 

     if(outputLine.equals("No errors")) { 
      tfCSVLine.append(outputLine+"\n\n\n"); 
      lengthH += (inputLine+"\n\n\n").length(); 
     } 
     else { 
      tfCSVLine.append(outputLine+"\n\n\n"); 
      int pos = inputLine.indexOf(inputLine, 0); 
      int len = lengthH; 
      lengthH += (inputLine+"\n\n\n").length(); 
      h.addHighlight(len, lengthH+(inputLine+"\n\n\n").length(), 
            DefaultHighlighter.DefaultPainter); 
     } 

     input1.close(); 
     input2.close(); 
     input3.close(); 
     input4.close(); 
} 
+4

가까운 미래에 괜찮은 대답이 없으면 [sscce] (http://sscce.org)를 작성하고 게시하는 것이 좋습니다. –

+1

그리고 이것은 JTextArea로 과도 할 수 있습니다. JTextPane을 사용하십시오. – mKorbel

+1

Loedolff의 답변이 도움이되지 않았 음을 짐작합니다. 그렇다면 다시 (그리고 깨진 기록처럼 들리며 유감스럽게 생각합니다.) 여전히 걸려 있다면 [sscce] (http://sscce.org)를 만들고 게시하는 것을 고려하십시오. –

답변

2

길이 H에 (inputLine+"\n\n\n").length()을 두 번 추가하고 있습니다. 아마 한 번만해야할까요? 또한 'else'블록이 실행될 때 lengthH가 제대로 초기화되지 않은 것처럼 보입니까?

관련 문제