Tom*_*zyk 3 java swing highlighting jtextarea
我有一个问题:
int index = text.indexOf(myWord);
while (index >= 0) {
int len = pattern.length();
hl.addHighlight(index, index + len, DefaultHighlighter.DefaultPainter);
index = text.indexOf(pattern, index + len);
}
Run Code Online (Sandbox Code Playgroud)
当我到达行尾突出显示仍然启用时,如何禁用突出显示?上面代码的结果:
谢谢你的回答,但问题是:
黑线是我点击并开始输入的地方,这只是错误.
好吧,我不得不对你的变量名做一些假设,我希望我做得对.基本上你的代码对我有用,但我不理解第一行:
int index = text.indexOf(myWord);
Run Code Online (Sandbox Code Playgroud)
我认为它应该是:
int index = text.indexOf(pattern);
Run Code Online (Sandbox Code Playgroud)
无论如何,我写了这段代码,它对我有用:
String pattern = "<aa>";
String text = textArea.getText();
int index = text.indexOf(pattern);
while(index >= 0){
try {
hl.addHighlight(index, index + pattern.length(), DefaultHighlighter.DefaultPainter);
index = text.indexOf(pattern, index + pattern.length());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
更新
当你点击标记文本的结尾并开始输入时,看起来也会被标记 - 这是我的错误.
对不起我之前没有看到.我认为你不能停止荧光笔,但你可以使用它CaretListener
并在那里做东西.这样,如果您输入与您的模式匹配的新字符串,它也会突出显示:
textArea.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
if(e.getMark() == e.getDot()){
Highlighter hl = textArea.getHighlighter();
hl.removeAllHighlights();
String pattern = "<aa>";
String text = textArea.getText();
int index = text.indexOf(pattern);
while(index >= 0){
try {
Object o = hl.addHighlight(index, index + pattern.length(), DefaultHighlighter.DefaultPainter);
index = text.indexOf(pattern, index + pattern.length());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
注意e.getMark() == e.getDot()
表示基于CaretEvent.getDot()和CaretEvent.getMark() javadoc的"没有文本选择" .否则,您不应突出显示除选定文本之外的任
截图
更新了SSCCE
这是一个完整的SSCCE来测试它:
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
public class Demo {
private void initGUI(){
final JTextArea textArea = new JTextArea();
textArea.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
if(e.getMark() == e.getDot()){
Highlighter hl = textArea.getHighlighter();
hl.removeAllHighlights();
String pattern = "<aa>";
String text = textArea.getText();
int index = text.indexOf(pattern);
while(index >= 0){
try {
Object o = hl.addHighlight(index, index + pattern.length(), DefaultHighlighter.DefaultPainter);
index = text.indexOf(pattern, index + pattern.length());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
}
}
});
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(300,200));
JPanel content = new JPanel(new FlowLayout());
content.add(scrollPane);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setContentPane(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().initGUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4478 次 |
最近记录: |