Swing/ParagraphMark のバックアップ(No.10)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ParagraphMark へ行く。
- 1 (2007-09-14 (金) 21:05:17)
- 2 (2007-09-18 (火) 11:52:51)
- 3 (2007-09-21 (金) 17:04:17)
- 4 (2008-05-09 (金) 19:25:37)
- 5 (2011-06-23 (木) 19:02:58)
- 6 (2012-08-02 (木) 21:12:37)
- 7 (2013-02-05 (火) 17:25:09)
- 8 (2013-08-30 (金) 01:33:35)
- 9 (2014-10-11 (土) 16:47:58)
- 10 (2014-11-19 (水) 01:31:21)
- 11 (2014-11-25 (火) 03:03:31)
- 12 (2015-12-22 (火) 00:34:00)
- 13 (2016-09-15 (木) 16:31:48)
- 14 (2017-10-26 (木) 10:56:57)
- 15 (2019-04-10 (水) 13:46:47)
- 16 (2021-01-19 (火) 19:31:40)
- 17 (2023-07-12 (水) 17:12:54)
- title: JEditorPaneで改行を表示 tags: [JEditorPane, StyledEditorKit] author: aterai pubdate: 2007-06-11 description: JEditorPaneで改行記号を表示します。
概要
JEditorPane
で改行記号を表示します。Swing - JTextPane View Problemから、ソースコードの大部分を引用しています。
Screenshot
Advertisement
サンプルコード
class MyEditorKit extends StyledEditorKit {
@Override public ViewFactory getViewFactory() {
return new MyViewFactory();
}
}
class MyViewFactory implements ViewFactory {
@Override public View create(Element elem) {
String kind = elem.getName();
if (kind != null) {
if (kind.equals(AbstractDocument.ContentElementName)) {
return new LabelView(elem);
} else if (kind.equals(AbstractDocument.ParagraphElementName)) {
return new MyParagraphView(elem);
} else if (kind.equals(AbstractDocument.SectionElementName)) {
return new BoxView(elem, View.Y_AXIS);
} else if (kind.equals(StyleConstants.ComponentElementName)) {
return new ComponentView(elem);
} else if (kind.equals(StyleConstants.IconElementName)) {
return new IconView(elem);
}
}
return new LabelView(elem);
}
}
class MyParagraphView extends ParagraphView {
private static final Color pc = new Color(120, 130, 110);
public MyParagraphView(Element elem) {
super(elem);
}
@Override public void paint(Graphics g, Shape allocation) {
super.paint(g, allocation);
paintCustomParagraph(g, allocation);
}
private void paintCustomParagraph(Graphics g, Shape a) {
try {
Shape paragraph = modelToView(getEndOffset(), a, Position.Bias.Backward);
Rectangle r = (paragraph == null) ? a.getBounds() : paragraph.getBounds();
int x = r.x;
int y = r.y;
int h = r.height;
Color old = g.getColor();
g.setColor(pc);
//paragraph mark
g.drawLine(x + 1, y + h / 2, x + 1, y + h - 4);
g.drawLine(x + 2, y + h / 2, x + 2, y + h - 5);
g.drawLine(x + 3, y + h - 6, x + 3, y + h - 6);
g.setColor(old);
} catch (Exception e) {
e.printStackTrace();
}
}
}
View in GitHub: Java, Kotlin解説
StyledEditorKit
を継承するEditorKit
を作成し、これをJEditorPane#setEditorKit
メソッドで、JEditorPane
に設定しています。
このEditorKit
は、Element
が段落(AbstractDocument.ParagraphElementName
)の場合、独自の改行記号を追加で描画するView
を返すViewFactory
を生成しています。