Quando si impostaContentType ("text/html") viene applicato solo per il testo impostato tramite JTextPane.setText(). Tutto il resto del testo, che viene messo in JTextPane tramite gli stili, è "immune" al tipo di contenuto.setContentType ("text/html") per JTextPane non funziona come previsto
Ecco cosa voglio dire:
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
//...
}
In generale, ho una chat che è rappresentato da JTextPane. Ricevo messaggi dal server, li elaboro - imposta il colore del testo per casi specifici, cambia i segni del sorriso sul percorso delle immagini ecc. Tutto è fatto entro i limiti dell'HTML. Ma come si può vedere chiaramente dall'esempio sopra, solo il setText è l'oggetto di setContentType ("text/html") e la seconda parte, dove il nuovo messaggio aggiunto è rappresentato da "text/plain" (se non sbaglio).
È possibile applicare il tipo di contenuto "text/html" a tutti i dati che vengono inseriti in JTextPane? Senza di esso, è quasi impossibile elaborare i messaggi senza l'implementazione di un algoritmo molto complesso.
Sento davvero di essere uno sviluppatore inefficiente (nonostante sia nuovo di swing e programmazione GUI). A volte penso che Java Swing manchi di molte buone caratteristiche e si dovrebbe implementarle da sé, ma la mia esperienza non mi permette di farlo e mi sconvolge molto. La tua variante è persino più grande di quella di Joop Eggen - è più flessibile, se così si può dire. – Dragon
Una risposta più completa dovrebbe ricevere Accept. –
@JoopEggen, (Offtopic) Sono un po 'diversi, ma entrambi sono buoni. Ho bisogno di controllarli nel contesto completo - è quello che faccio ora :) – Dragon