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

ColorPane-抓取不同字符的字符串可能吗?

吕英豪
2023-03-14

我现在正在做一个老项目,这个项目是给我的,它现在使用java swing,并且有一个基本的GUI。它有一个ColorPane扩展Jtextpane以更改所选文本的颜色。

  public void changeSelectedColor(Color c) {
      changeTextAtPosition(c, this.getSelectionStart(), this.getSelectionEnd());
  }

说那个字符串=“你好世界!”你好,颜色是绿色,世界是黑色。我如何从JTextPane中根据Hello的颜色获取它。我已经尝试了笨拙的方法,只是存储选定的单词,当我改变那里的颜色,但有没有一种方法,我可以抓住所有绿色文本在一次?我试过谷歌搜索,但是...还没有找到什么好方法。谁能给我指明正确的方向吗?

共有1个答案

巴宏恺
2023-03-14

可能有很多种方法,但是...

您需要获得对StyleDocument的引用,该引用支持JTextPane。从给定的字符位置开始,您需要检查给定颜色的字符属性,如果true继续到文本字符,否则就完成了。

import java.awt.Color;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class Srap {

    public static void main(String[] args) {
        JTextPane textPane = new JTextPane();
        StyledDocument doc = textPane.getStyledDocument();

        Style style = textPane.addStyle("I'm a Style", null);
        StyleConstants.setForeground(style, Color.red);

        try {
            doc.insertString(doc.getLength(), "BLAH ", style);
        } catch (BadLocationException ex) {
        }

        StyleConstants.setForeground(style, Color.blue);

        try {
            doc.insertString(doc.getLength(), "BLEH", style);
        } catch (BadLocationException e) {
        }

        Color color = null;
        int startIndex = 0;
        do {
            Element element = doc.getCharacterElement(startIndex);
            color = doc.getForeground(element.getAttributes());
            startIndex++;
        } while (!color.equals(Color.RED));
        startIndex--;

        if (startIndex >= 0) {

            int endIndex = startIndex;
            do {
                Element element = doc.getCharacterElement(endIndex);
                color = doc.getForeground(element.getAttributes());
                endIndex++;
            } while (color.equals(Color.RED));
            endIndex--;
            if (endIndex > startIndex) {
                try {
                    String text = doc.getText(startIndex, endIndex);
                    System.out.println("Red text = " + text);
                } catch (BadLocationException ex) {
                    ex.printStackTrace();
                }
            } else {
                System.out.println("Not Found");
            }
        } else {
            System.out.println("Not Found");
        }
    }
}

这个简单的例子会找到第一个红色的单词,但是你也可以很容易地遍历整个文档,找到所有你想要的单词。

 类似资料:
  • 问题内容: 我目前正在处理给我的一个旧项目,它目前使用Java swing并且具有基本的GUI。它具有一个ColorPane,它可以扩展Jtextpane来更改所选文本的颜色。 它使用这种方法 说那个字符串=“ Hello World!” 你好颜色是绿色世界是黑色。如何根据Jtextpane的颜色来获取Hello。我尝试了笨拙的方式,即在更改颜色时只存储所选单词,但是有一种方法可以一次性获取所有绿

  • 问题内容: 为什么当我使用以下操作对字符求和时,它返回数字而不是字符?它不应该给出相同的结果吗? 下面的代码复制了字符: doubleChar(“ The”)→“ TThhee” 问题答案: 以下表达式的结果 是String连接的结果。Java语言规范说明 字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。 的

  • 问题内容: 上面的代码片段中的代码产生以下输出。 a =’Hello’和b =’Hello’的长度分别为6和6,equals()为false 虽然两者的价值,并在控制台上显示的是,回报。怎么样? 问题答案: 和是 不是 可打印字符。它们都是控制字符,它们决定了文本应如何呈现-从左到右或从右到左。 您不会在终端中看到它们,并且它们不应该是等效的字符串。

  • 对性能是否有影响? 不同Java版本的行为是否有差异?

  • 问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。

  • substr key start end 返回截取过的key的字符串值,注意并不修改key的值。下标是从0开始的