Strange text wrapping with styled text in JTextPane with Java 7

前端 未结 3 1448
暖寄归人
暖寄归人 2020-12-05 15:31

I have two different editors using JTextPane with strange bugs in Java 7 that did not occur with the previous JVM versions. It happens with long lines containing styled text

3条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-05 16:07

    for futures readers, bug is still present in JDK 1.7.0_04.,

    comparing Java7 and with stable Java6,

    enter image description here<------ Java7 v.s. Java6 --->enter image description here

    enter image description here<------ Java7 v.s. Java6 --->enter image description here

    enter image description here<------ Java7 v.s. Java6 --->enter image description here

    enter image description here <------ Java7 v.s. Java6 ---> enter image description here

    from code

    import java.awt.Dimension;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    
    public class BugWrapJava7 {
    
        private JFrame frame = new JFrame();
        private JTextPane jtp;
        private StyledDocument doc;
    
        public BugWrapJava7() {
            jtp = new JTextPane();
            jtp.setText("\ntype some text in the above empty line and check the wrapping behavior");
            doc = jtp.getStyledDocument();
            doc.addDocumentListener(new DocumentListener() {
    
                public void insertUpdate(DocumentEvent e) {
                    insert();
                }
    
                public void removeUpdate(DocumentEvent e) {
                    insert();
                }
    
                public void changedUpdate(DocumentEvent e) {
                    insert();
                }
    
                public void insert() {
                    SwingUtilities.invokeLater(new Runnable() {
    
                        public void run() {
                            Style defaultStyle = jtp.getStyle(StyleContext.DEFAULT_STYLE);
                            doc.setCharacterAttributes(0, doc.getLength(), defaultStyle, false);
                        }
                    });
                }
            });
            JScrollPane scroll = new JScrollPane(jtp);
            scroll.setPreferredSize(new Dimension(200, 200));
            frame.add(scroll);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                public void run() {
                    BugWrapJava7 bugWrapJava7 = new BugWrapJava7();
                }
            });
        }
    }
    

提交回复
热议问题