テキスト |
Swing のその他の変更 |
デフォルトの HTML フォント - Serif
これまで、HTML テキスト (ラベル、ボタンなどに使用される HTML テキストを含む) のデフォルトフォントは、SansSerif でした。バージョン 1.3 から、デフォルトフォントが Serif になりました。HTMLEditorKit insertAtBoundry => insertAtBoundary
HTMLEditorKit.InsertHTMLTextAction 内のメソッド insertAtBoundry のスペルが間違っていました。これは推奨されなくなり、insertAtBoundary が追加されました。DocumentEvent の自動処理
DocumentEvent を管理するデフォルト機能は、CompositeView から移動され、また package private から public に変更になりました。DocumentEvent の管理が複数の protected メソッドに分散されたため、サブクラス化がより容易になりました。
- updateChildren
- forwardUpdate
- forwardUpdateToView
- updateLayout
この動作を実現するため、子のビューを管理するメソッドも CompositeView から View に移動する必要が生じました。
- removeAll
- remove
- append
- replace
次のメソッドが、javax.swing.text.View に追加されました。
- protected boolean updateChildren(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
- protected void forwardUpdate(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a, ViewFactory f)
- protected void forwardUpdateToView(View v, DocumentEvent e, Shape a, ViewFactory f)
- protected void updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
- public void removeAll()
- public void remove(int i)
- public void insert(int offs, View v)
- public void append(View v)
- public void replace(int offset, int length, View[] views)
BoxView - axis プロパティ、layoutChanged メソッドの追加
BoxView は、それまでサブクラスが取得できなかった axis 引数を保持します。国際化上の考慮事項に基づいて axis を設定するサブクラスは、これをプロパティとして必要とします。場合によっては (テーブルなど) 子の設定に関係なくレイアウトが無効になることがあるので、ボックスのレイアウトについても、要求されたサイズとは別個に処理する必要があります。次のメソッドが javax.swing.text.BoxView に追加されています。
FlowView を拡張するようになった ParagraphView
View プロトコルは構築フローをサポートしますが、それまでの実装は比較的単純な段落フローを作成する ParagraphView だけでした。決定フロー、改ページなどを実行するために、本質上機能を一般化できます。 機能を一般化すると、代替フローをずっと容易に作成できるようになります。FlowView と呼ばれる新規クラスは、論理構造を物理構造に変換するという方法を取ります。この方法は、FlowStrategy と呼ばれる入れ子にされたクラスにより定義されます。ParagraphView は 段落固有の動作 (行間隔、先頭行のインデント、行揃えなど) を追加する FlowView を拡張します。この変更により、次のメソッドが javax.swing.text.View クラスに追加されました。
FormView の地域対応化と、非推奨になった SUBMIT、RESET
javax.swing.text.html.FormView
クラスは、これまで地域対応ではありませんでした。2 つの public static final String として SUBMIT および RESET がありますが、これらは HTML ドキュメント内の <form> 要素用のテキスト判定に使用されます。これらは public static final であるため、地域対応にはできません。SUBMIT および RESET は推奨されなくなり、値は UIManager のプロパティであるFormView.submitButtonText
およびFormView.resetButtonText
から取得されるようになりました。直列化
ここでは、swing.text パッケージ内での直列化関連の変更点の概要を示します。
javax.swing.text.html.parser.ParserDelegator
は、Serializable を実装するようになりました。- null のコンストラクタが public static 内部クラス
HTML.Tag
に追加されて、サブクラスの直列化が機能するようになりました。html パッケージ - AbstractWriter の公開
AbstractWriter は、テキストドキュメントからカスタム記述を提供しようとする開発者向けの基底クラスとして使用されます。たとえば、HTMLWriter は AbstractWriter を拡張し、かつ HTML を出力するために html パッケージ内で使用されます。AbstractWriter の問題点は、それが提供する大半のメソッドおよびインスタンス変数が private であったということです。それらを使用可能にするには、サブクラスが数多くのメソッドおよびインスタンス変数をコピーする必要があります。HTMLWriter は AbstractWriter を拡張しますが、最終的にはすべてのインスタンス変数をコピーし、ほとんどすべてのメソッドをオーバーライドします。以下の変更により、AbstractWriter の API がオープンになり、より広く活用することが可能になりました。このため、HTMLWriter はかなり単純になり、AbstractWriter から多くをコピーする必要はなくなりました。以下を参照してください。
- public int getStartOffset()
- public int getEndOffset()
- protected Writer getWriter()
- protected int getLineLength()
- protected void setCurrentLineLength(int length)
- protected int getCurrentLineLength()
- protected boolean isLineEmpty()
- protected void setCanWrapLines(boolean newValue)
- protected boolean getCanWrapLines()
- public void setLineSeparator(String value)
- public String getLineSeparator()
- protected int getIndentLevel()
- protected void writeLineSeparator() throws IOException
- protected void write(char[] chars, int startIndex, int length) throws IOException
- protected void output(char[] content, int start, int length) throws IOException
html パッケージ - CSS1 サポートの公開
html パッケージは CSS 1 をサポートします。CSS の機能の 1 つとして、その名前が示すように階層式スタイルシートのサポートがあります。これを利用すると、複数のスタイルシートを同時に使って表示を変更することができます。たとえば、通常ブラウザはデフォルトスタイルを定義するスタイルシートを保持します。 特定のページもスタイルシートを保持することができ、それはブラウザが提供するスタイルシートをオーバーライドします。次のメソッドは、この機能を開発者に対して公開し、複数のスタイルシートのリンクを可能にします。
- public synchronized void addStyleSheet(StyleSheet ss)
- public synchronized void removeStyleSheet(StyleSheet ss)
- public StyleSheet[] getStyleSheets()
HTML 挿入の簡素化
これまで、開発者が既存の HTML ドキュメントに任意の HTML を挿入することは、あまり容易な作業ではありませんでした。挿入を実行するためには、開発者は Swing の text パッケージと html パッケージに関する詳細な知識が必要でした。多くの開発者たちは、Dynamic html を使用していました。 これにより、既存のページへの HTML の挿入を簡単にするためのメソッドがいくつか提供されます。こうしたユーザの利便性を向上させるために、Dynamic html が提供するメソッドを綿密にミラー化するメソッドが公開されました。
- public void setInnerHTML(Element elem, String htmlText) throws BadLocationException, IOException
- public void setOuterHTML(Element elem, String htmlText) throws BadLocationException, IOException
- public void insertAfterStart(Element elem, String htmlText) throws BadLocationException, IOException
- public void insertBeforeEnd(Element elem, String htmlText) throws BadLocationException, IOException
- public void insertBeforeStart(Element elem, String htmlText) throws BadLocationException, IOException
- public void insertAfterEnd(Element elem, String htmlText) throws BadLocationException, IOException
- public Element getElement(String id)
- public Element getElement(Element e, Object attribute, Object value)
さらに、HTMLEditorKit.ParserCallback クラスに追加された定数を次に示します。
text パッケージの ZoneView 新規クラス
問題 -
Swing の text パッケージは、View オブジェクトを使ってレイアウトおよびレンダリングを目的としたドキュメントモデルの表示を行います。モデルが大きい場合、表示できるのはそのうちの少数であるにもかかわらず、作成される View オブジェクトの数は多くなります。実際にオブジェクトを表示する必要が生じるまでその作成を遅らせる場合に View 実装が必要になります。これは、推測される View オブジェクトのサイズで領域を構築しておき、必要時に実際の View オブジェクトで置き換えることにより実現されます。これにより、大きなドキュメントに使用されるメモリ量を実質的に減らすことができます。解決法 -
ZoneView という次のクラスがサポートする領域は、実際に表示または編集が行われるまで大量のメモリを消費しません。国際化対応の BIDI をサポートするためにより重量となる WrappedPlainView は、そのスーパークラスを BoxView から ZoneView (BoxView である) に変更することにより、このクラスから大きな恩恵を受けることができます。以下を参照してください。
text パッケージの AsyncBoxView 新規クラス
問題 -
Swing の text パッケージは、View オブジェクトを使ってレイアウトおよびレンダリング処理用のドキュメントモデルの表示を行います。他のほとんどの場合と同様、レイアウトは、イベント処理用スレッドで行われます。レイアウトは、非常に多くの CPU 時間を占有してしまうことがあります。 この場合、レイアウトの実行中にユーザインタフェースのフリーズが引き起こされます。text パッケージは、平行処理をある程度サポートしますが、さらにレイアウトが GUI イベント処理スレッドとは非同期に実行されるように拡張する必要があります。View 実装は、レイアウトを非同期に実行する上で必要です。解決法 -
この必要性に応えるため、次のクラスが text パッケージに追加されました。詳細は、「Swing Connection」を参照してください。text の View クラスに追加された getGraphics メソッド
描画に使用する Graphics オブジェクトを取得するメソッドが、javax.swing.text.View クラスに含まれています。以下を参照してください。
Copyright © 1999 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先:swing-feedback@java.sun.com。 これは購読リストではありません。 |
Java ソフトウェア |