java - 如何单独突出显示

标签 java swing jtextarea

我试图突出显示从客户端发送的修复消息的错误。 然而,这样做时它不会遵循这个算法。如果修复消息中存在错误(只是一个字符串),它将突出显示整个字符串,否则将不突出显示它。 基本上我要问的是如何突出显示多个部分,而不是一旦出现错误就突出显示整个输出?

例如: 我遇到的错误

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();
}

最佳答案

您正在向 lengthH 添加两次 (inputLine+"\n\n\n").length() 。您应该只这样做一次吗?另外,当“else” block 执行时,lengthH 似乎没有正确初始化?

关于java - 如何单独突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135326/

相关文章:

java - 使用 HtmlUnit 预渲染 Javascript 网站(HTML 快照)

java - Swagger 自动配置过程中会扫描哪些类?

java - 将 jTextArea 中的文本(即另存为)保存到新的 .txt 文件中

java - 从 JtextArea 获取用户输入

java - 检查方法是否返回任何值类型 int

java - Apache Camel 2.12 : Adding bean to already existing context

java - 当谓词发生变化时如何更新颜色荧光笔(swing)

Java - 高级模式对话框

Java : Scroll Over JScrollPane

java - 装饰JTextArea