突出显示 JTextArea 的特定部分
Highlighting a certain part of a JTextArea
我试图在我创建的文本区域中突出显示文本的特定部分。我的程序所做的是它在文本区域中显示一系列延迟的数字(对于此代码,它是 0-9)。我想要的是突出显示数字 2、4、6、8。我将如何使用荧光笔?我不想搜索字符串,因为我可能会突出显示其他数字。 (对于 28,它会突出显示 2)。任何答案表示赞赏。谢谢。
import java.awt.event.*;
import javax.swing.*;
import java.util.List;
public class Test extends JFrame
{
JPanel panel;
JButton button;
JTextArea tArea;
SwingWorker<Void,String> worker;
HandlerAction action = new HandlerAction();
public Test() {
panel = new JPanel();
button = new JButton("Start");
tArea = new JTextArea();
JScrollPane sPane = new JScrollPane(tArea);
sPane.setBounds(0,0,100,100);
button.setBounds(0,110,100,30);
this.add(button);
this.add(sPane);
this.add(panel);
button.addActionListener(action);
}
private class HandlerAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
tArea.setText("");
worker = new SwingWorker<Void, String>(){
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i<10; i++) {
publish(i + "\n");
sleep();
}
return null;
}
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
try {
tArea.getHighlighter().addHighlight(0, 3, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err)}
}
}
};
worker.execute();
}
};
}
public void sleep() {
try {
Thread.sleep(500);
} catch (InterruptedException err) {}
}
public static void main(String[] args) {
test test = new test();
test.setSize(200,200);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
}
编辑:
我添加了这个
try {
tArea.getHighlighter().addHighlight(0, 3, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err)}
这里
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
}
但它突出显示了所有数字。有什么想法吗?
Class 名称应以大写字符开头。不要因为这是一个SSCCE就偷懒。
I've added this to the process()
所以请更新您的代码以显示您的新逻辑。我们不知道您在方法中的何处添加了代码。
but it's highlighting all of the digits. Any Ideas?
如何添加一个 if 语句来进行条件突出显示:
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
if (line.length() == 2)
{
char first = line.charAt(0);
if (first == '2'
|| first == '4'
|| first == '6'
|| first == '8')
{
try
{
int offset = tArea.getDocument().getLength() - 2;
tArea.getHighlighter().addHighlight(offset, offset + 1, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err);}
}
}
}
}
不要使用空的 catch 块。您如何知道何时出现错误?
我试图在我创建的文本区域中突出显示文本的特定部分。我的程序所做的是它在文本区域中显示一系列延迟的数字(对于此代码,它是 0-9)。我想要的是突出显示数字 2、4、6、8。我将如何使用荧光笔?我不想搜索字符串,因为我可能会突出显示其他数字。 (对于 28,它会突出显示 2)。任何答案表示赞赏。谢谢。
import java.awt.event.*;
import javax.swing.*;
import java.util.List;
public class Test extends JFrame
{
JPanel panel;
JButton button;
JTextArea tArea;
SwingWorker<Void,String> worker;
HandlerAction action = new HandlerAction();
public Test() {
panel = new JPanel();
button = new JButton("Start");
tArea = new JTextArea();
JScrollPane sPane = new JScrollPane(tArea);
sPane.setBounds(0,0,100,100);
button.setBounds(0,110,100,30);
this.add(button);
this.add(sPane);
this.add(panel);
button.addActionListener(action);
}
private class HandlerAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
tArea.setText("");
worker = new SwingWorker<Void, String>(){
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i<10; i++) {
publish(i + "\n");
sleep();
}
return null;
}
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
try {
tArea.getHighlighter().addHighlight(0, 3, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err)}
}
}
};
worker.execute();
}
};
}
public void sleep() {
try {
Thread.sleep(500);
} catch (InterruptedException err) {}
}
public static void main(String[] args) {
test test = new test();
test.setSize(200,200);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
}
编辑: 我添加了这个
try {
tArea.getHighlighter().addHighlight(0, 3, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err)}
这里
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
}
但它突出显示了所有数字。有什么想法吗?
Class 名称应以大写字符开头。不要因为这是一个SSCCE就偷懒。
I've added this to the process()
所以请更新您的代码以显示您的新逻辑。我们不知道您在方法中的何处添加了代码。
but it's highlighting all of the digits. Any Ideas?
如何添加一个 if 语句来进行条件突出显示:
@Override
protected void process(List<String> chunks) {
for (String line : chunks) {
tArea.append(line);
if (line.length() == 2)
{
char first = line.charAt(0);
if (first == '2'
|| first == '4'
|| first == '6'
|| first == '8')
{
try
{
int offset = tArea.getDocument().getLength() - 2;
tArea.getHighlighter().addHighlight(offset, offset + 1, DefaultHighlighter.DefaultPainter);
} catch (BadLocationException err) {System.out.println(err);}
}
}
}
}
不要使用空的 catch 块。您如何知道何时出现错误?