gpt4 book ai didi

java - 写入时更改 JTextPane 中的样式

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:56 25 4
gpt4 key购买 nike

我创建了一个具有两种不同样式的 jtextpane:一种用于数字(粉色前景),另一种用于其余样式(黑色前景)。我在 jtextpane 中添加了一个按键监听器(我使用 KeyReleased 函数)来处理新按下的字符,但在写入过程中遇到问题。场景如下:

  • 文字为:你好123
  • “你好”文本为黑色,数字“123”为粉色。
  • 现在插入符号位于“1”和“2”之间,我按“a”并发生了一些奇怪的事情。
  • 字符“a”变成粉红色,然后变成黑色。

为什么会短时间变黑?

我以这种方式处理 KeyReleased:

  1. 我将所有文本设置为默认样式(干净阶段)
  2. 我将仅将数字的前景更改为粉红色
<小时/>

这是示例:

import java.awt.Color;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.StringTokenizer;

import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;


public class Example extends JFrame {

JTextPane pn = new JTextPane();
public Example() {

addDefaultStyle(pn);
addNumberStyle(pn);

pn.addKeyListener(new KeyAdapter() {

@Override
public void keyReleased(KeyEvent arg0) {
String text = pn.getText();


pn.getStyledDocument().setCharacterAttributes(0, text.length(), pn.getStyle("default"), true);

StringTokenizer ts = new StringTokenizer(text, " ");

while(ts.hasMoreTokens()){
String token = ts.nextToken();

try{
Integer.parseInt(token);

pn.getStyledDocument().setCharacterAttributes(text.indexOf(token), token.length(), pn.getStyle("numbers"), true);

}catch(Exception e){

pn.getStyledDocument().setCharacterAttributes(text.indexOf(token), token.length(), pn.getStyle("default"), true);
}
}

}
});

getContentPane().add(pn);
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
}

private void addDefaultStyle(JTextPane pn){
Style style = pn.addStyle("default", null);

pn.setForeground(Color.blue);
pn.setBackground(Color.WHITE);

StyleConstants.setForeground(style, pn.getForeground());
StyleConstants.setBackground(style, pn.getBackground());
StyleConstants.setBold(style, false);
}

private void addNumberStyle(JTextPane pn){
Style style = pn.addStyle("numbers", null);

StyleConstants.setForeground(style, Color.PINK);
StyleConstants.setBackground(style, Color.WHITE);
StyleConstants.setBold(style, true);
}

public static void main(String args []){
new Example();
}
}

最佳答案

关于java - 写入时更改 JTextPane 中的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557170/

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