Po ustawieniuContentType ("text/html") jest stosowane tylko dla tekstu ustawionego za pomocą JTextPane.setText(). Wszystkie inne teksty, które są umieszczane w JTextPane za pośrednictwem stylów, są "odporne" na typ zawartości.setContentType ("text/html") dla JTextPane nie działa tak jak się oczekuje
Oto co mam na myśli:
private final String[] messages = {"first msg", "second msg <img src=\"file:src/test/2.png\"/> yeah", "<img src=\"file:src/test/2.png\"/> third msg"};
public TestGUI() throws BadLocationException {
JTextPane textPane = new JTextPane();
textPane.setEditable(false);
textPane.setContentType("text/html");
//Read all the messages
StringBuilder text = new StringBuilder();
for (String msg : messages) {
textext.append(msg).append("<br/>");
}
textPane.setText(text.toString());
//Add new message
StyledDocument styleDoc = textPane.getStyledDocument();
styleDoc.insertString(styleDoc.getLength(), messages[1], null);
JScrollPane scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//add scrollPane to the main window and launch
//...
}
W ogóle, mam czat, który jest reprezentowany przez JTextPane. Otrzymuję wiadomości z serwera, przetwarzam je - ustaw kolor tekstu dla konkretnych przypadków, zmieniaj znaczniki uśmiechu na ścieżkę obrazów itp. Wszystko jest robione w granicach HTML. Ale jak widać wyraźnie z powyższego przykładu, tylko setText jest przedmiotem setContentType ("text/html"), a druga część, gdzie dodana nowa wiadomość jest reprezentowana przez "text/plain" (jeśli się nie mylę).
Czy można zastosować typ zawartości "text/html" do wszystkich danych wstawianych do JTextPane? Bez tego przetwarzanie wiadomości bez implementacji bardzo złożonego algorytmu jest prawie niemożliwe.
Naprawdę czuję, że jestem nieefektywnym programistą (mimo że jestem nowy na swing i programowanie GUI). Czasem czuję, że Java Swing nie ma wielu dobrych cech i należy je sam wdrożyć, ale moje doświadczenie nie pozwala mi tego zrobić i bardzo mnie to denerwuje. Twój wariant jest nawet większy niż Joop Eggen - jest bardziej elastyczny, jeśli można tak powiedzieć. – Dragon
Bardziej pełna odpowiedź, powinna otrzymać Accept. –
@JoopEggen, (Offtopic) Są trochę inne, ale oba są dobre. Muszę sprawdzić je w pełnym kontekście - to jest to, co teraz robię :) – Dragon