2009-03-13 21 views
4

常に(ログファイルに似た)オブジェクト(モデル)のリストがあり、リッチテキストとしてJEditorPane(ビュー)に表示したいと思います。どうやって一緒に接着できますか?Java SwingのカスタムテキストJEditorPane

http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#documentは、使用するのに十分な情報を提供していないようです。

+0

オブジェクト(モデル)としてどのようなクラスが使用されていますか? – ksuralta

+0

私は独自のオブジェクトのVectorを持っています。それぞれはStringと他の情報を含んでいます。理想的には、ある種類のカスタムレンダラがスタイルを適用してテキストペインに追加することになりましたが、どうやって一緒に掛けるかはわかりません。 – Pool

答えて

2

あなたはAttributeSetと一緒DefaultStyledDocumentを使用することができます。

SimpleAttributeSet attr = new SimpleAttributeSet(); 
StyleConstants.setBold(attr , true); 
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr)) 
2

単純な解決策の1つは、モデル内の各オブジェクトをHTMLに変換し、その文字列を追加してJEditorPaneで設定できるHTMLドキュメントを作成することです。

+0

はい、これは最も簡単な解決策ですが、ユーザーがカラースキームを変更したり、データをフィルタしたりするときに、データを再レンダリングしたいと考えました。私は、データ全体が何らかの事象の後に再び追加されると思う。 – Pool

+0

これが当てはまる場合は、JTableを使用する方が良いかもしれないと思います。ドキュメントを作成しようとするよりも、オブジェクトのTableModelを作成する方が簡単です。その後、テーブルモデルにフィルタを適用して、色などのテーブルの再生者設定を変更することができます。 – Mark

0

カスタム作成Abstract Documentは痛いです。 Objectモデルと文書(DocumentListener)の変更を聞き、モデルまたはビューのいずれかを更新する仲介モデルを使用する方がよいでしょう。これは、ユーザーの時間で作業している場合にはうまくいきます(Objectモデルを毎秒1,000回更新するのではなく)。

+0

エディタペインのモデルはドキュメントでなければなりません。ドキュメントを実装していない場合、カスタムモデルはどのように追加できますか? – Pool

+0

私は標準StyleDocumentsの1つを使い、textとand属性を操作するだけでした。 –

0

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)); 

時にはすべての方法をスクロールしないテキスト・ペインと矛盾する結果を提供します。