当前位置: 首页 > 知识库问答 >
问题:

JTextPane仅在第一行正确设置字符属性

孔瑾瑜
2023-03-14
        private void changeColor(StyledDocument styledDocument)
        {
            String keywords[] = {"html", "body", "div", "teste"};
            String texto      = edtEditing.getText();

            int startIndex;
            int start;

            StyleContext context = StyleContext.getDefaultStyleContext();

            Style styleDefault = context.getStyle(StyleContext.DEFAULT_STYLE); // default
            styledDocument.setCharacterAttributes(0, texto.length(), styleDefault, true);

            AttributeSet attr = context.addAttribute(context.getEmptySet(), StyleConstants.Foreground, Color.red);

            for (String word:keywords)
            {
                startIndex = 0;
                start      = texto.indexOf(word, startIndex);
                while (start >= 0)
                {
                    styledDocument.setCharacterAttributes(start, word.length(), attr, true);
                    startIndex += word.length();
                    start = texto.indexOf(word, startIndex);
                }
            }
        }

共有1个答案

魏宏邈
2023-03-14

这种副作用是由这一行引起的:

String texto      = edtEditing.getText();

您将直接从JTextPane获取文本,但要在StyledDocument对象上设置属性。将此行更改为:

StyledDocument document = edtEditing.getStyledDocument();
String texto = document.getText(0, document.getLength());

并处理可能的异常。

JTextPane pane = new JTextPane();
pane.setText("Something html\r\nSomething html");
StyledDocument document = pane.getStyledDocument();
String text2 = pane.getText();
String text1 = document.getText(0, document.getLength());
System.out.println(text1.equals(text2));
 类似资料:
  • 问题内容: 我们正在使用类似于系统规则的方法来处理JUnit 4测试中的(系统)属性。这样做的主要原因是每次测试后都要清理环境,以便其他测试不会无意间依赖于可能的副作用。 由于JUnit 5已发布,所以我想知道是否存在“ JUnit 5方法”吗? 问题答案: 有JUnit 5 Pioneer,一个“ JUnit 5扩展包”。它带有和。从文档: 的和注释可用于清除,分别为测试执行系统设置属性的值。这

  • 我有一根这样的绳子 余额:“5048543747”,余额:“5119341413”,帐号:“0001000918”, 我使用了REGEX (.*?), 结果我收到的第一个子字符串是 余额:“5048543747” 实际上,我想要得到的结果是数组包括 { 余额:“5048543747” Baldefovd:“5119341413” 账号:“0001000918” } 有人能帮我吗。多谢。 编辑 我使

  • 嗨,我已经在CentOS 7上安装了wine(版本wine-3.0.2)来运行我的。vbs文件。但在运行时,它得到了以下错误。 你能帮我修一下这个吗。我对此不太了解

  • 我不确定我错过了什么。我的自定义逻辑适用于我为目标指定的所有字符串属性,而不仅仅是一个。 图像映射器: 购物产品映射器: 生成的mapstruct类: 为什么描述字段也与toFullImagePath一起使用? 这个“@Mapping(target=“fullImagePath”,source=“thumbPath”)不应该指定我只想更改fullImagePath吗?

  • 问题内容: Java和Mac都相当新。我想确保已设置JAVA_HOME,以便在其他程序中可以使用其路径。所以我做了一些谷歌搜索,这就是我得到的: 如果我在终端中输入 / usr / libexec / java_home ,则得到此信息: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 但如果在终端中输入 echo

  • 对Java和Mac都很陌生...我想确定JAVA_HOME的设置,以便在其他程序中可以使用它的路径。所以我在谷歌上搜索了一下,下面是我得到的信息: 如果我在terminal中输入/usr/libexec/java_home,我会得到/system/library/java/javavirtualmachines/1.6.0.jdk/contents/home,但是如果我在terminal中输入ec