Java 打开HTML时JTextPane设置前景

Java 打开HTML时JTextPane设置前景,java,swing,jtextpane,Java,Swing,Jtextpane,我有一个JTextPane,有时我想把它改成前台。问题是,如果要将JTextPane的ContentType切换到text/html,则不会显示我的呼叫JTextPane.setForeground(myColor)我如何解决这个问题? SSCCE: public class TextAreaTest { public static void main(String[] a) { final JFrame frame = new JFrame(); fra

我有一个
JTextPane
,有时我想把它改成
前台
。问题是,如果要将
JTextPane
ContentType
切换到
text/html
,则不会显示我的呼叫
JTextPane.setForeground(myColor)
我如何解决这个问题?

SSCCE:

public class TextAreaTest {
    public static void main(String[] a) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JTextPane textArea = new JTextPane();
        textArea.setEditable(false);
        textArea.setFocusable(false);

        textArea.setText("<html>First line text<br>Second line text</html>");

        final JPanel panel = new JPanel(new FlowLayout());

        final JCheckBox htmlOnOff = new JCheckBox("HTML");
        htmlOnOff.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.setContentType(htmlOnOff.isSelected() ? "text/html" : "text/plane");
                textArea.setText("<html>First line text<br>Second line text</html>");
            }
        });

        JToggleButton buttonRed = new JToggleButton("Red");
        buttonRed.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.setForeground(Color.RED);
            }
        });

        JToggleButton buttonGreen = new JToggleButton("Green");
        buttonGreen.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.setForeground(Color.GREEN);
            }
        });

        JToggleButton buttonBlue = new JToggleButton("Blue");
        buttonBlue.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.setForeground(Color.BLUE);
            }
        });

        panel.add(htmlOnOff);
        panel.add(buttonRed);
        panel.add(buttonGreen);
        panel.add(buttonBlue);

        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(buttonRed);
        buttonGroup.add(buttonBlue);
        buttonGroup.add(buttonGreen);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(0, 0));
        contentPane.add(panel, BorderLayout.NORTH);
        contentPane.add(textArea, BorderLayout.CENTER);

        frame.setContentPane(contentPane);
        frame.setUndecorated(true);
        Dimension size = new Dimension(275, 80);
        frame.setSize(size);
        frame.setPreferredSize(size);

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                frame.setVisible(true);
                System.out.println(frame.getSize());
            }
        });
    }
}
公共类文本区域测试{
公共静态void main(字符串[]a){
最终JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
最终JTextPane textArea=新JTextPane();
textArea.setEditable(false);
textArea.setFocusable(false);
textArea.setText(“第一行文本
第二行文本”); 最终JPanel面板=新JPanel(新FlowLayout()); 最终JCheckBox htmlOnOff=新JCheckBox(“HTML”); addActionListener(新ActionListener(){ @凌驾 已执行的公共无效操作(操作事件e){ textArea.setContentType(htmlOnOff.isSelected()?“text/html”:“text/plane”); textArea.setText(“第一行文本
第二行文本”); } }); JToggleButton按钮Red=新的JToggleButton(“红色”); addActionListener(新建ActionListener()){ @凌驾 已执行的公共无效操作(操作事件e){ textArea.setForeground(颜色为红色); } }); JToggleButton按钮绿色=新的JToggleButton(“绿色”); addActionListener(新建ActionListener()){ @凌驾 已执行的公共无效操作(操作事件e){ textArea.setForeground(颜色为绿色); } }); JToggleButton按钮蓝色=新的JToggleButton(“蓝色”); addActionListener(新ActionListener()){ @凌驾 已执行的公共无效操作(操作事件e){ textArea.setForeground(颜色:蓝色); } }); 面板。添加(htmlOnOff); 面板。添加(按钮红色); 面板。添加(按钮绿色); 面板。添加(按钮蓝色); ButtonGroup ButtonGroup=新建ButtonGroup(); 按钮组。添加(按钮red); 添加(按钮蓝色); 添加(按钮绿色); JPanel contentPane=新的JPanel(); setLayout(新的BorderLayout(0,0)); 添加(面板,BorderLayout.NORTH); 添加(textArea,BorderLayout.CENTER); frame.setContentPane(contentPane); 框架。设置未装饰(真实); 尺寸尺寸=新尺寸(275,80); 框架。设置尺寸(尺寸); frame.setPreferredSize(大小); SwingUtilities.invokeLater(新的Runnable(){ @凌驾 公开募捐{ frame.setVisible(true); System.out.println(frame.getSize()); } }); } }
更新#1
我注意到
JLabel
可以做我想做的事情。但我不能用它:(

谢谢大家,但我自己找到了答案:

StyledDocument doc = textPane.getStyledDocument();
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setForeground(attrs, myColor);
doc.setParagraphAttributes(0, doc.getLength(), attrs, false);
textPane.setDocument(doc);

您不需要更改html元素吗color@user2834520因为技术任务。谢谢,我已经找到了答案,如果有兴趣,请看我的帖子。