概要

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

スクリーンショット

Swing/CenteredMultiRowCellEditor.png

サンプルコード

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);
      

参考リンク

コメント