当前位置:编程学习 > JAVA >>

JTextPane改变字体颜色的一个问题

    最近在用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();
}
}
--------------------编程问答-------------------- 求助路过的大神 --------------------编程问答-------------------- 我这里测试过你的代码中文也可以变换颜色,未发现异常 --------------------编程问答-------------------- 我刚试了下,好像可以啊,中文没有问题。
在eclipse下提示:JComboBox<String>这个有问题,直接改为JComboBox就可以了。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,