概要

JTextPaneにセパレータとして、hr要素やJSeparatorMatteBorderを設定したJLabelなどを追加します。

サンプルコード

HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
textPane.setEditorKit(kit);
textPane.setDocument(doc);
textPane.setEditable(false);
textPane.setText("<html>&lt;hr&gt;:<hr />");

textPane.insertComponent(new JLabel("JSeparator: "));
textPane.insertComponent(new JSeparator(JSeparator.HORIZONTAL));
insertBR(kit, doc);

textPane.insertComponent(new JLabel("MatteBorder1: "));
textPane.insertComponent(new JLabel() {
  @Override public void updateUI() {
    super.updateUI();
    setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.RED));
  }

  @Override public Dimension getMaximumSize() {
    return new Dimension(textPane.getSize().width, 1);
  }
});
insertBR(kit, doc);

textPane.insertComponent(new JLabel("MatteBorder2: "));
textPane.insertComponent(new JLabel() {
  @Override public void updateUI() {
    super.updateUI();
    setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.GREEN));
  }

  @Override public Dimension getPreferredSize() {
    return new Dimension(textPane.getSize().width, 1);
  }

  @Override public Dimension getMaximumSize() {
    return this.getPreferredSize();
  }
});
insertBR(kit, doc);

textPane.insertComponent(new JLabel("JSeparator.VERTICAL "));
textPane.insertComponent(new JSeparator(JSeparator.VERTICAL) {
  @Override public Dimension getPreferredSize() {
    return new Dimension(1, 16);
  }

  @Override public Dimension getMaximumSize() {
    return this.getPreferredSize();
  }
});
textPane.insertComponent(new JLabel(" TEST"));
View in GitHub: Java, Kotlin

解説

  • hr要素
    • htmlEditorKit.insertHTML(doc, doc.getLength(), "<hr />", 0, 0, null)などでhr要素を追加
  • JSeparator
    • textPane.insertComponent(new JSeparator(JSeparator.HORIZONTAL))で水平JSeparatorを追加
  • MatteBorder1
    • MatteBorderを設定したテキスト無しのJLabelを追加
    • 最大サイズが(幅:JTextPane#getWidth()、高さ:1px)になるようJLabel#getMaximumSize()をオーバーライド
  • MatteBorder2
    • MatteBorderを設定したテキスト無しのJLabelを追加
    • 推奨サイズと最大サイズが(幅:JTextPane#getWidth()、高さ:1px)になるようJLabel#getPreferredSize()JLabel#getMaximumSize()をオーバーライド
  • JSeparator.VERTICAL
    • textPane.insertComponent(new JSeparator(JSeparator.VERTICAL))で垂直JSeparatorを追加
    • JSeparator#getPreferredSize()JSeparator#getMaximumSize()をオーバーライドしないと表示されない

参考リンク

コメント