我目前正在处理给我的一个旧项目,它目前使用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版本的行为是否有差异?