モジュール java.desktop
パッケージ javax.swing.text.html

クラスStyleSheet

java.lang.Object
javax.swing.text.StyleContext
javax.swing.text.html.StyleSheet
すべての実装されたインタフェース:
Serializable, AbstractDocument.AttributeContext

public class StyleSheet extends StyleContext
レンダリングされるHTMLビューの視覚的な特性の定義をサポートします。 StyleSheetは、HTMLモデルを視覚的な特性に変換するために使用されます。 これを使用して、表示のLook & Feelをカスタマイズしたり、同じモデルによる複数のビューをそれぞれ違った形でレンダリングしたりできます。これはCSS規則リポジトリと考えることができます。 CSS属性のキーはCSS.Attribute型のオブジェクトです。 値の型はStyleSheetの実装に応じて異なりますが、CSS値を文字列表現で返すにはtoStringメソッドが必要です。

HTMLのViewの実装で属性を取得するための主要なエントリ・ポイントはgetViewAttributesメソッドです。 これは、属性とビューの関連付けに必要なポリシーを確立するために実装する必要があります。 各HTMLEditorKit (また関連する各JEditorPane)は、専用のStyleSheetを持つことができますが、デフォルトではすべてのHTMLEditorKitのインスタンスが1つのシートを共有します。 HTMLDocumentのインスタンスは、特定のドキュメント用のCSS指定が記述されたStyleSheetを持つこともできます。

Viewが格納する状態を減らし、より軽量にするために、StyleSheetは一部のレンダリング・タスクを処理するペインタのファクトリとして動作できます。 これによって、実装は何をキャッシュするか、1つのセレクタが複数のビューに共通するレベルで何を共有するかを決定することが可能になります。 StyleSheetは複数のドキュメントの表示で使用され、HTML属性は使用されるセレクタには通常影響を与えません。このため、共有の可能性が大きく広がります。

規則は名前付きスタイルとして保存され、要素のコンテキストから規則にすばやく変換するためにその他の情報が保存されます。 次のコード・フラグメントは、名前付きスタイル(したがってCSS規則を含む)を表示します。


  
   import java.util.*;
   import javax.swing.text.*;
   import javax.swing.text.html.*;
  
   public class ShowStyles {
  
       public static void main(String[] args) {
         HTMLEditorKit kit = new HTMLEditorKit();
         HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
         StyleSheet styles = doc.getStyleSheet();
  
         Enumeration rules = styles.getStyleNames();
         while (rules.hasMoreElements()) {
             String name = (String) rules.nextElement();
             Style rule = styles.getStyle(name);
             System.out.println(rule.toString());
         }
         System.exit(0);
       }
   }
  
 

CSSスタイルが要素で定義されたビジュアル属性をオーバーライドする必要がある場合のセマンティクスが正しく定義されていません。 たとえば、HTML <body bgcolor=red>は本文のバックグラウンドを赤にします。 しかし、HTMLファイルにbody { background: blue }というCSS規則もある場合、本文のバックグラウンドを何色にすべきかについて不明確になります。 現在の実装では、要素で定義された視覚的な属性を最優先します。つまり、それらの属性は常にスタイルより先に確認されます。 したがって上記の例では、body要素がバックグラウンド・カラーを赤に定義しているため、バックグラウンドは赤になります。

すでに述べたように、このメソッドはCSSをサポートします。 CSS仕様のすべてをサポートしているわけではありません。 どのプロパティをサポートしているかについては、CSSクラスのjavadocを参照してください。 現在のところサポートしていない概念に関連する主要なCSS解析は、A: link { color: red }などの擬似セレクタと、important修飾子の2つです。

実装上のノート:
この実装は現在不完全です。 将来、代替の実装によって置き換えられる可能性があります。 このクラスの今後のバージョンでは、より優れたCSSサポートが提供される予定です。