JEditorPaneのStyleSheetを使ってlist bulletを画像に変更
Total: 4222
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JEditorPane
のHTMLEditorKit
からStyleSheet
を取得し、list-style-image
を使ってList bullet
を変更します。
Screenshot
Advertisement
サンプルコード
JEditorPane pane = new JEditorPane();
pane.setContentType("text/html");
pane.setEditable(false);
HTMLEditorKit htmlEditorKit = (HTMLEditorKit) pane.getEditorKit();
StyleSheet styleSheet = htmlEditorKit.getStyleSheet();
String u = getClass().getResource(bullet).toString();
styleSheet.addRule(String.format("ul{list-style-image:url(%s);margin:0px 20px;}", u));
View in GitHub: Java, Kotlin解説
- 上:
Default
- 下:
ul{list-style-image:url(bullet.png);}
CSS
のlist-style-image
プロパティを使用してbullet
を画像に変更AlignmentY
を設定しても行揃えが中央にならないので画像の下に余白を追加ul
のマージンもmargin:0px 20px;
に変更
javax.swing.text.html.CSS
はlist-style-type
プロパティも対応しているのでcircle
、square
、decimal
などがbullet
として使用可能(サイズは固定で変更不可?)styleSheet.addRule("ul{list-style-type:circle;margin:0px 20px;}"); // styleSheet.addRule("ul{list-style-type:disc;margin:0px 20px;}"); // styleSheet.addRule("ul{list-style-type:square;margin:0px 20px;}"); // styleSheet.addRule("ul{list-style-type:decimal;margin:0px 20px;}");
javax.swing.text.html.CSS
はa:hover
などの擬似クラス(pseudo-classes
)や:before
などの擬似要素(pseudo elements
)に対応していないので、以下のようにlist-style-type:none
として:before
で任意の文字をbullet
に適用できないstyleSheet.addRule("ul{list-style-type:none;margin:0px 20px;}"); styleSheet.addRule("ul li:before{content:'\u00BB';}");
javax.swing.text.html.StyleSheet.ListPainter#drawShape(...)
などをオーバーライドできれば直接bullet
の形やサイズを変更できそうだが、コンストラクタがパッケージプライベートのため変更不可
参考リンク
- JEditorPaneのHTMLEditorKitにCSSを適用
- JDK-8201925 JEditorPane unordered list bullets look pixelated - Java Bug System