最近在用JTextPane的过程中遇到了一个问题,描述如下:
    我通过一个组合框(JComboBox)改变JTextPane的输入字体的颜色,发现英文状态下正常;但是当输入法为中文时(我用的搜狗输入法),不管怎么通过组合框改变字体颜色,JTextPane中打出来的中文字颜色都不变。我不知道这是为什么?怎样才能改变中文字的颜色?希望各位大神能给我一点帮助,谢谢。
    下面是我写的一段测试用的代码:import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;import java.awt.*;
import java.awt.event.*;/*
 * 一个简单的测试类
 */
public class JPanelTest extends JFrame implements ItemListener{
private JComboBox<String> jcb_color; //改变颜色的组合框
private JTextPane jtp; //写字板
private String color = "黑色"; //记录写字板的输入颜色
private SimpleAttributeSet attr = new SimpleAttributeSet(); //写字板的字体属性集

//构造函数,用来布局
public JPanelTest(){
Container con = getContentPane();
JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());
jcb_color = new JComboBox<String>(new String[]{"黑色", "蓝色", "红色"});
jcb_color.setPreferredSize(new Dimension(200, 20));
jcb_color.setBorder(new LineBorder(Color.BLACK));
jcb_color.addItemListener(this);
jtp = new JTextPane();
jtp.setPreferredSize(new Dimension(200, 200));
jtp.setBorder(new LineBorder(Color.BLACK));
jp.add(jcb_color, BorderLayout.NORTH);
jp.add(jtp, BorderLayout.SOUTH);
con.add(jp);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}

//监听组合框jcb_color选中项改变的事件
public void itemStateChanged(ItemEvent e){
if(e.getSource() == jcb_color){
if(jcb_color.getSelectedIndex() == 0){
color = "黑色";
}
else if(jcb_color.getSelectedIndex() == 1){
color = "蓝色";
}
else{
color = "红色";
}

update_attr();
jtp.setCharacterAttributes(attr, true);
}
}

//根据组合框选中颜色的改变而改变字体属性集
public void update_attr(){
if(color.equals("黑色")){
StyleConstants.setForeground(attr, Color.BLACK);
}
else if(color.equals("蓝色")){
StyleConstants.setForeground(attr, Color.BLUE);
}
else{
StyleConstants.setForeground(attr, Color.RED);
}
}

//main函数
public static void main(String[] args){
new JPanelTest();
}
}