Dziwne zawijanie tekstu za pomocą stylizowanego tekstu w JTextPane z Javą 7
Mam dwa różne edytory używające JTextPane z dziwnymi błędami w Javie 7, które nie występowały w poprzednich wersjach JVM. Dzieje się tak w przypadku długich linii zawierających stylizowany tekst lub komponenty.
Oto przykład demonstrujący ten błąd. W tym przykładzie styl domyślny jest stosowany dla całego tekstu za każdym razem, gdy wstawiany jest znak. Przetestowałem to z JDK 1.7.0_04.
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class BugWrapJava7 extends JFrame {
JTextPane jtp;
StyledDocument doc;
public BugWrapJava7() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
jtp = new JTextPane();
add(jtp, BorderLayout.CENTER);
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) {
}
public void changedUpdate(DocumentEvent e) {
}
});
setSize(200, 200);
setVisible(true);
}
public void insert() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Style defaultStyle = jtp.getStyle(StyleContext.DEFAULT_STYLE);
doc.setCharacterAttributes(0, doc.getLength(), defaultStyle, false);
}
});
}
public static void main(String[] args) {
new BugWrapJava7();
}
}
Moje pytanie brzmi: czy coś jest nie tak w moim kodzie, czy jest to rzeczywiście nowy błąd wprowadzony w Javie 7? A jeśli jest to nowy błąd JVM, czy istnieje obejście tego problemu?
Może być związane zpytanie 8666727, ale problem tkwi raczej w złym opakowaniu niż w wyglądzie paska przewijania.