2013-03-17 56 views
2

我有一种方法可以突出显示文本区域中某个单词的所有出现。是否有任何方法可以使用开始和结束偏移来仅突出显示该行中的单词。使用开始和结束偏移来突出显示JTextArea中特定行上的文本

我的当前代码。

public static void highlight(JTextComponent textComp, String pattern) { 

    try { 
     Highlighter hilite = textComp.getHighlighter(); 
     javax.swing.text.Document doc = textComp.getDocument(); 
     String text = doc.getText(0, doc.getLength()); 
     int pos = 0; 

     // Search for pattern 
     while ((pos = text.indexOf(pattern, pos)) >= 0) { 
      // Create highlighter using private painter and apply around pattern 
      hilite.addHighlight(pos, pos + pattern.length(), painter2); 
      pos += pattern.length(); 
     } 
    } catch (BadLocationException e) { 
    } 
} 

这被称为执行一个JButton动作:

highlight(textArea_1, "in"); 

结果: enter image description here

我尝试使用开始和结束偏移方法,但没有luck.I试图突出显示“在”只在第6行。任何帮助在此非常赞赏。

static int iline =6; 

    public static void highlight(JTextComponent textComp, String pattern) { 

    try { 
     Highlighter hilite = textComp.getHighlighter(); 
     javax.swing.text.Document doc = textComp.getDocument(); 
     int start =((JTextArea) textComp).getLineStartOffset(iline); 
     int end = ((JTextArea) textComp).getLineEndOffset(iline); 
     String text = doc.getText(start,end); 
     int pos = start; 

     // Search for pattern 
     while ((pos = text.indexOf(pattern, pos)) >= start) { 
      // Create highlighter using private painter and apply around pattern 
      hilite.addHighlight(pos, pos + pattern.length(), painter2); 
      pos += pattern.length(); 
     } 
    } catch (BadLocationException e) { 
    } 
} 
+0

为了更好地帮助越早,张贴[SSCCE(http://sscce.org/)。 - 不要忽略异常输出。 '} catch(BadLocationException e){0} {e.printStackTrace();}应该是'} catch(BadLocationException e){e.printStackTrace();} }' – 2013-03-17 06:08:44

回答

0

得到它的工作谢谢@camickr

代码:

public static void highlight(JTextComponent textComp, String pattern) { 

    try { 
     Highlighter hilite = textComp.getHighlighter(); 

     String text = textComp.getText(); 
     String line =null; 
     int start = 0; 
     int end; 
     int totalLines = ((JTextArea) textComp).getLineCount(); 
     for (int i=0; i < totalLines; i++) { 

      if(i==5){ //Line Numbers Decrement by 1 
      start = ((JTextArea) textComp).getLineStartOffset(i); 
      end = ((JTextArea) textComp).getLineEndOffset(i); 
      line = text.substring(start, end); 
      System.out.println("My Line: " + line); 
      System.out.println("Start Position of Line: " + start); 
      System.out.println("End Position of Line: " + end); 
      } 
     } 
     int pos = start; 

     // Search for pattern 
     if ((pos =text.indexOf(pattern, pos)) >= start) { 
      // Create highlighter using private painter and apply around pattern 
      hilite.addHighlight(pos, pos + pattern.length(), painter2); 
      pos += pattern.length(); 
     } 
    } catch (BadLocationException e) { 
    } 
} 
3
int start =((JTextArea) textComp).getLineStartOffset(iline); 
int end = ((JTextArea) textComp).getLineEndOffset(iline); 
String text = doc.getText(start,end); 
int pos = start; 

让我们假设,我们对每行10个字符。所以如果你想要第6行的文本,起始变量将等于51并且结束变量60.

当你得到第6行的文本时,它将只包含10个字符。

所以当你在51开始搜索时,你已经在搜索字符串的末尾,所以你不会得到任何匹配。

您只需要在偏移量0处开始搜索,然后添加高光时,需要将开始的值添加到高光偏移量。

+0

但是,如果偏移量从0开始,那么它会突出显示所有其他出现的“in”?如果你可以提供我的代码,你在上面提到了什么。谢谢 – 2013-03-17 06:33:41

相关问题