gpt4 book ai didi

java - 使用 SwingWorker 在 JTextPane 中突出显示语法

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:27 24 4
gpt4 key购买 nike

我正在尝试在 JTextPane 中突出显示文本。我正在使用 SwingWorker 在后台突出显示。但我无法获得所需的输出。
我的代码如下:
主类:

class MultiColor {
private static void displayGUI() {
final JTextPane ta = new JTextPane();
JFrame frame = new JFrame("EXAMPLE");
JButton jb = new JButton("Change");
JScrollPane jsp = new JScrollPane(ta);
frame.add(jsp, BorderLayout.CENTER);
frame.add(jb, BorderLayout.PAGE_END);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
Modify mm = new Modify(ta);
mm.execute();
}
});
}
public static void main(String[] a) {
Runnable r = new Runnable() {
@Override
public void run() {
displayGUI();
}
};
SwingUtilities.invokeLater(r);
}
}

修改类是:

class Modify extends SwingWorker<Void,Object> {
private JTextPane ta;
private StyleContext style;
private AttributeSet textStyle;
public Modify(JTextPane text) {
ta = text;
}
private void matching(String str){
style = StyleContext.getDefaultStyleContext();
textStyle = style.addAttribute(style.getEmptySet(),StyleConstants.Foreground, Color.red);
textStyle = style.addAttribute(textStyle,StyleConstants.FontSize, 15);

String regx = "\\b(class|int|void|static|final|public|private|protected|float|if|else|for|while|try|catch|boolean|import|return)\\b";
String input = str;
Pattern p = Pattern.compile(regx);
Matcher m = p.matcher(input);
while(m.find())
ta.getStyledDocument().setCharacterAttributes(m.start(),(m.end() - m.start()),textStyle, false);
}
@Override
protected Void doInBackground() {
matching(ta.getText());
return null;
}
@Override
protected void done() {
}
}

我的输出是:

enter image description here

我想显示所有具有指定文本样式的关键字。
我将如何获得所需的输出。

最佳答案

似乎您的突出显示偏移已关闭。

参见 Text and New Lines可能的原因和简单的解决方案。

关于java - 使用 SwingWorker 在 JTextPane 中突出显示语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com