Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DefaultHighlightPainter在JTextPane中不断切换_Java_Swing_Highlight_Jtextpane - Fatal编程技术网

Java DefaultHighlightPainter在JTextPane中不断切换

Java DefaultHighlightPainter在JTextPane中不断切换,java,swing,highlight,jtextpane,Java,Swing,Highlight,Jtextpane,我目前正在开发一个应用程序,它可以读取一个大文本,并突出显示该文本中的特定子字符串。而且它还挺管用的 但似乎(我不知道为什么)每次高亮显示字符串时,远光灯都会不断移动 public List<int[]> findString(String text) { text = text.toLowerCase(); List<int[]> highlightPositions = new ArrayList<int[]>();

我目前正在开发一个应用程序,它可以读取一个大文本,并突出显示该文本中的特定子字符串。而且它还挺管用的

但似乎(我不知道为什么)每次高亮显示字符串时,远光灯都会不断移动

public List<int[]> findString(String text) {        
    text = text.toLowerCase();

    List<int[]> highlightPositions = new ArrayList<int[]>();
    JTextPane pane = getTextPane();

    String paneText = pane.getText().toLowerCase();

    int end = 0;
    while (paneText.indexOf(text, end) != -1) {         

        int start = paneText.indexOf(text, end);
        end = start + text.length();        

        highlightPositions.add(new int[] {start, end});                 
    }

    try {
        highlight(highlightPositions);
    } catch (Exception ex) {
    }       
return null;
}
公共列表查找字符串(字符串文本){
text=text.toLowerCase();
List highlightPositions=new ArrayList();
JTextPane=getTextPane();
字符串paneText=pane.getText().toLowerCase();
int end=0;
while(paneText.indexOf(text,end)!=-1){
int start=paneText.indexOf(text,end);
end=start+text.length();
添加(新的int[]{start,end});
}
试一试{
突出显示(高亮位置);
}捕获(例外情况除外){
}       
返回null;
}
这是进行实际高亮显示的代码

public void highlight(List<int[]> highlightPositions) throws BadLocationException {
    DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);

    JTextPane textPane = getTextPane();     

    for (int[] position : highlightPositions) {
        System.out.println("Highlight: " + position[0] + " : " + position[1]);
        textPane.getHighlighter().addHighlight(position[0], position[1], highlightPainter);

    }
}
public void highlightPositions(列出高光位置)引发BadLocationException{
DefaultHighlighter.DefaultHighlightPainter highlightPainter=新的DefaultHighlighter.DefaultHighlightPainter(颜色.黄色);
JTextPane textPane=getTextPane();
对于(int[]位置:远光灯位置){
System.out.println(“突出显示:“+位置[0]+”:“+位置[1]);
textPane.getHighlighter().addHighlight(位置[0],位置[1],highlightPainter);
}
}
有人知道如何解决这个问题吗

编辑: 下面是我试图突出显示“设备”一词时的样子

不要使用
getText()
getText()
方法将返回平台的字符串和行尾字符串,对于Windows,该平台是
\r\n
。但是,文档仅存储下线字符串的
\n
,因此文档中的每一额外行的偏移量都不匹配

解决方案是使用:

String paneText = pane.getDocument().getText().toLowerCase();

有关此问题的更多完整信息,请参阅。

您所说的“强光不断变换”是什么意思?此外,当我试图复制这一点,它为我工作-请考虑提供一个可运行。我刚刚更新我的帖子与图片。这就是我试图突出显示“设备”这个词时的样子。
String paneText = pane.getDocument().getText().toLowerCase();