HTMLDocument, znikający tekst

0

Mam sobie taki prosty kod:

public class Main {

    public static void main(String[] args) {
        JFrame f = new JFrame("HTML test");
        f.setSize(400, 400);
        JTextPane p = new JTextPane();
        p.setContentType("text/html");
        p.setText("<html><head></head><body><p>xxx you yyy</p></body></html>");
        f.getContentPane().add(p);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        HTMLDocument doc = (HTMLDocument) p.getDocument();
        SimpleAttributeSet a = new SimpleAttributeSet();
        a.addAttribute(HTML.Attribute.COLOR, "#ff0000");
        a.addAttribute(StyleConstants.NameAttribute, HTML.Tag.FONT);
        doc.setCharacterAttributes(5, 3, a, false);

        String text = p.getText();
        System.out.print(text);
    }

}

Jak widzicie jako dane wejściowe mam HTML:

<html><head></head><body><p>xxx you yyy</p></body></html>

któremu chce ustawić frazę you na czerwono ale zamiast tego otrzymuje


<html>
  <head>
    
  </head>
  <body>
    <p>
      xxx <font color="#ff0000"> yyy
    </p>
  </body>
</html>

Czy ktoś wie może jak to poprawnie zrobić z obiektem HTMLDocument ?

Z góry dzięki za pomoc.

0

Strona

<html>
<head>
</head>
<body>
<p><font color="ff0000">you</font></p>
<body>
</html>

wyświetliła mi się poprawnie (z czerwonym you).

0

Dopiero teraz przeczytałem dokładnie twój kod, musisz go trochę zmienić

public class Main {
 
    public static void main(String[] args) {
        JFrame f = new JFrame("HTML test");
        f.setSize(400, 400);
        JEditorPane p = new JEditorPane(); //tu jest inaczej
        p.setContentType("text/html");
        p.setText("<html><head></head><body><p><font color=\"#ff0000\"> you </font></p></body></html>");
        f.getContentPane().add(p);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       ....
    }
}
0
bo napisał(a)

Dopiero teraz przeczytałem dokładnie twój kod, musisz go trochę zmienić

public class Main {
 
    public static void main(String[] args) {
        JFrame f = new JFrame("HTML test");
        f.setSize(400, 400);
        JEditorPane p = new JEditorPane(); //tu jest inaczej
        p.setContentType("text/html");
        p.setText("<html><head></head><body><p><font color=\"#ff0000\"> you </font></p></body></html>");
        f.getContentPane().add(p);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       ....
    }
}

Nie mogę tego sobie setText'em ustawić. To co wrzuciłem to tylko przykład sytuacji jaką muszę rozwiązać w większym sofcie.

Mam HTMLDocument na który idzie dużo operacji i muszę programatczynie zaczerwienić niektóre wyrazy. Niestety po wykorzystaniu metody setCharacterAttributes zżera mi tekst i teraz nie wiem czy ja to źle robię czy jakimś bugiem tu śmierdzi. Przy DefaultStyledDocument dało się to zrobić, a przy HTML dzieją się cuda.

0

A zmieniłeś już JTextPane na JEditorPane?

0

To samo. Kod:

public static void main(String[] args) throws BadLocationException {
        JFrame f = new JFrame("HTML test");
        f.setSize(400, 400);
        JEditorPane p = new JEditorPane();
        p.setContentType("text/html");
        p.setText("<html><head></head><body><p>xxx you yyy</p></body></html>");
        f.getContentPane().add(p);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        HTMLDocument doc = (HTMLDocument) p.getDocument();
        SimpleAttributeSet a = new SimpleAttributeSet();
        a.addAttribute(HTML.Attribute.COLOR, "#ff0000");
        a.addAttribute(StyleConstants.NameAttribute, HTML.Tag.FONT);
        doc.setCharacterAttributes(5, 3, a, false);

        String text = p.getText();
        System.out.print(text);

    }

produkuje HTML'a:

<html>
  <head>
    
  </head>
  <body>
    <p>
      xxx <font color="#ff0000"> yyy
    </p>
  </body>
</html>

1 użytkowników online, w tym zalogowanych: 0, gości: 1