JTextPaneを使用して会話を表示するチャットクライアントを構築しようとしています。ユーザーが選択したチャット参加者の過去の文章を強調表示するのに問題があります。これを実装するときは、コンテンツの一部がHTMLである必要があるため、HTMLDocumentの使用に固執する必要があります。
最良のアイデアは、会話に参加するユーザーごとに異なる名前のスタイルを使用することであるように思われました。特定の人のテキストを強調表示する必要がある場合、私は彼の個人的なスタイルを更新するだけで、彼が言ったことはすべて魔法のように強調表示されるはずです。残念ながら、これは機能しません。
したがって、テキストを追加するには、次のようにします。
public void addMessage(String from, String message){
HTMLDocument doc = (HTMLDocument) textPane.getStyledDocument();
if(doc != null){
try {
String stylename = "from_" + from;
if(textPane.getStyle(stylename) == null){
LOG.debug("Did not find style. Adding new: " + stylename);
Style nameStyle = textPane.addStyle(stylename, null);
StyleConstants.setForeground(nameStyle, Color.black);
StyleConstants.setBold(nameStyle, true);
}else{
LOG.debug("Found existing style: " + textPane.getStyle(stylename));
}
doc.insertString(doc.getLength(), from + ": ", textPane.getStyle(stylename));
doc.insertString(doc.getLength(), message + "\n", null);
} catch (BadLocationException ble) {
LOG.error("Could not insert text to tab");
}
}
}
これまでのところ良い...テキストは私が望むようにtextPaneに表示されます。ただし、将来、スタイルシートを更新して呼び出しようとすると、次のようになります。
public void highlight(String name, boolean highlight){
Style fromStyle = textPane.getStyle("from_" + name);
if(fromStyle != null){
LOG.debug("found style, changing color");
StyleConstants.setForeground(fromStyle, Color.red);
}else{
LOG.debug("fromStyle was NULL");
}
}
..スタイルが見つかり、コードが実行されていることがわかりますが、画面上では何も変更されていません。
この問題を解決する方法について何か提案がありますか。名前付きスタイルでこれを機能させる方法はありますか、それともまったく異なるアプローチを取る必要がありますか?
ありがとうございました