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因为技术任务。谢谢,我已经找到了答案,如果有兴趣,请看我的帖子。