常に(ログファイルに似た)オブジェクト(モデル)のリストがあり、リッチテキストとしてJEditorPane(ビュー)に表示したいと思います。どうやって一緒に接着できますか?Java SwingのカスタムテキストJEditorPane
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#documentは、使用するのに十分な情報を提供していないようです。
常に(ログファイルに似た)オブジェクト(モデル)のリストがあり、リッチテキストとしてJEditorPane(ビュー)に表示したいと思います。どうやって一緒に接着できますか?Java SwingのカスタムテキストJEditorPane
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#documentは、使用するのに十分な情報を提供していないようです。
あなたはAttributeSet
と一緒DefaultStyledDocument
を使用することができます。
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED);
document.insertString(document.getLenght(),"yourstring", attr))
単純な解決策の1つは、モデル内の各オブジェクトをHTMLに変換し、その文字列を追加してJEditorPaneで設定できるHTMLドキュメントを作成することです。
カスタム作成Abstract Document
は痛いです。 Object
モデルと文書(DocumentListener
)の変更を聞き、モデルまたはビューのいずれかを更新する仲介モデルを使用する方がよいでしょう。これは、ユーザーの時間で作業している場合にはうまくいきます(Object
モデルを毎秒1,000回更新するのではなく)。
エディタペインのモデルはドキュメントでなければなりません。ドキュメントを実装していない場合、カスタムモデルはどのように追加できますか? – Pool
私は標準StyleDocumentsの1つを使い、textとand属性を操作するだけでした。 –
OKを、最も簡単な方法は、JTextPaneのを拡張することでしたので。拡張クラスは、基になるリストを作成して管理しました。フォーマットの変更(新しい色など)では、リストはデータを完全に再フォーマットします。唯一の本当の問題はどちらも、自動スクロールが100%信頼できるものではないということでした。
Container parent = getParent();
// get the parent until scroll pane is found
while (parent != null && !(parent instanceof JScrollPane)) {
parent = parent.getParent();
}
if (parent != null) {
JScrollPane scrollPane = (JScrollPane)parent;
scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
}
と
scrollRectToVisible(new Rectangle(0, getHeight() - 2, 1, 1));
時にはすべての方法をスクロールしないテキスト・ペインと矛盾する結果を提供します。
オブジェクト(モデル)としてどのようなクラスが使用されていますか? – ksuralta
私は独自のオブジェクトのVectorを持っています。それぞれはStringと他の情報を含んでいます。理想的には、ある種類のカスタムレンダラがスタイルを適用してテキストペインに追加することになりましたが、どうやって一緒に掛けるかはわかりません。 – Pool