用 jTextPane 给文本加下划线

Underline text with jTextPane

大家好,我有一个使用 JTextPane 的面板,我想交替显示文本和下划线文本,但我不知道为什么我不能在我想加下划线的文本部分加下划线。 这是我的代码,我只想在文本中加下划线:"Underline":

public class TestMLD extends JPanel{
    
    private MLD mld;
    
    TestMLD() throws BadLocationException{
        init();
    }
    
    private void init() throws BadLocationException {
        

        JTextPane textPane = new JTextPane();
        textPane.setOpaque(false);
        
          SimpleAttributeSet attributeSet = new SimpleAttributeSet();
          StyleConstants.setItalic(attributeSet, true);
          textPane.setCharacterAttributes(attributeSet, true);
          Font font = new Font("Serif", Font.ITALIC, 18);
          textPane.setFont(font);
          StyledDocument doc = textPane.getStyledDocument();
          Style style = textPane.addStyle("", null);
          doc.insertString(doc.getLength(), "Some text ", style);
          
          

          StyleConstants.setUnderline(attributeSet, true);
          /**THE PART I WANT TO UNDERLINE **/
          doc.insertString(doc.getLength(), "Underline ", style);
          StyleConstants.setUnderline(attributeSet, false);
          
          
          doc.insertString(doc.getLength(), "Some text\n", style);
          JScrollPane scrollPane = new JScrollPane(textPane);
          textPane.setEditable(false);
          add(textPane);
         
    
    }
    
    public static void main(String[] args) throws BadLocationException {
        JFrame frame = new JFrame();
          frame.getContentPane().add(new TestMLD());

          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setSize(400, 400);
          frame.setVisible(true);
    }



}

提前致谢

      StyleConstants.setUnderline(attributeSet, true);

您正在为“attributeSet”设置“下划线”属性。

      doc.insertString(doc.getLength(), "Underline ", style);

你为什么要尝试使用“样式”。您的“样式”变量没有属性。

使用“attributeSet”,因为它包含您的属性:

      //doc.insertString(doc.getLength(), "Underline ", style);
      doc.insertString(doc.getLength(), "Underline ", attributeSet);

此外,您为什么要尝试设置“斜体”属性:

      StyleConstants.setItalic(attributeSet, true);
      textPane.setCharacterAttributes(attributeSet, true);
      Font font = new Font("Serif", Font.ITALIC, 18);

您使用的是“斜体”字体。

摆脱:

      //StyleConstants.setItalic(attributeSet, true);
      //textPane.setCharacterAttributes(attributeSet, true);