• category: swing folder: CenteredMultiRowCellEditor title: JTextPaneで中央揃え、行折返し可能なリストセルエディタを作成する tags: [JTextPane, JList, JFrame] author: aterai pubdate: 2021-03-01T00:02:34+09:00 description: JTextPaneで中央揃え、行折返し可能なエディタを作成し、JFrameに追加してリストセルの編集に使用します。 image: https://drive.google.com/uc?id=1rvx8N6fXs-31JKGBXFSd18bMepyvmIqN hreflang:
       href: https://java-swing-tips.blogspot.com/2021/02/create-jlist-heavyweight-cell-editor.html
       lang: en

概要

JTextPaneで中央揃え、行折返し可能なエディタを作成し、JFrameに追加してリストセルの編集に使用します。

サンプルコード

class WrapLabelView extends LabelView {
  protected WrapLabelView(Element element) {
    super(element);
  }

  @Override public float getMinimumSpan(int axis) {
    switch (axis) {
      case View.X_AXIS:
        return 0;
      case View.Y_AXIS:
        return super.getMinimumSpan(axis);
      default:
        throw new IllegalArgumentException("Invalid axis: " + axis);
    }
  }
}
View in GitHub: Java, Kotlin

解説

  • JTextArea
    • JTextArea#setLineWrap(true)で行折返しが設定可能
    • デフォルト左揃え、JTextArea#setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT)で右揃えは可能だ、中央揃えは設定不可
      • javax.swing.text.WrappedPlainView.WrappedLineクラスなどがパッケージプライベートなのでカスタマイズしづらい
  • JTextPane
    • 行折返し設定が存在しないので、折り返し可能なLabelViewを作成、使用するEditorKitを設定する必要がある
    • 中央揃えは本文のパラグラフ属性にStyleConstants.ALIGN_CENTERを設定することで実現可能
      StyledDocument doc = textPane.getStyledDocument();
      SimpleAttributeSet center = new SimpleAttributeSet();
      StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
      doc.setParagraphAttributes(0, doc.getLength(), center, false);
      

参考リンク

コメント