当前位置: 首页 > 面试题库 >

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

印成天
2023-03-14
问题内容

我目前正在处理给我的一个旧项目,它目前使用Java
swing并且具有基本的GUI。它具有一个ColorPane,它可以扩展Jtextpane来更改所选文本的颜色。

它使用这种方法

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

说那个字符串=“ Hello World!”
你好颜色是绿色世界是黑色。如何根据Jtextpane的颜色来获取Hello。我尝试了笨拙的方式,即在更改颜色时只存储所选单词,但是有一种方法可以一次性获取所有绿色文本吗?我曾尝试使用Google搜索,但是…实际上并没有提出任何好的方法。谁能指出我正确的方向?


问题答案:

可能有很多方法可以做到这一点,但是…

您需要获取从到给定字符位置的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以更改所选文本的颜色。 说那个字符串=“你好世界!”你好,颜色是绿色,世界是黑色。我如何从JTextPane中根据Hello的颜色获取它。我已经尝试了笨拙的方法,只是存储选定的单词,当我改变那里的颜色,但有没有一种方法,我可以抓住所有绿色文本在一次?我试

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

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

  • 我需要将数字从字符串提取到int数组,但在Matcher类中找不到合适的函数。有什么办法比我做得更好吗?例如,这样的split()函数按分隔符分割字符串并返回准备好的数组。 输出: 1111 2222 3333 4444

  • 字符串池是否可以包含两个值相同的字符串??

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