我现在正在做一个老项目,这个项目是给我的,它现在使用java swing,并且有一个基本的GUI。它有一个ColorPane扩展Jtextpane以更改所选文本的颜色。
public void changeSelectedColor(Color c) {
changeTextAtPosition(c, this.getSelectionStart(), this.getSelectionEnd());
}
说那个字符串=“你好世界!”你好,颜色是绿色,世界是黑色。我如何从JTextPane中根据Hello的颜色获取它。我已经尝试了笨拙的方法,只是存储选定的单词,当我改变那里的颜色,但有没有一种方法,我可以抓住所有绿色文本在一次?我试过谷歌搜索,但是...还没有找到什么好方法。谁能给我指明正确的方向吗?
可能有很多种方法,但是...
您需要获得对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开始的