TITLE:JTextPaneに追加するコンポーネントのベースラインを揃える

Posted by at 2012-09-03

JTextPaneに追加するコンポーネントのベースラインを揃える

`JTextPane`に追加するコンポーネントのベースラインが他の文字列などとを揃うように設定します。

  • &jnlp;
  • &jar;
  • &zip;
InsertComponentBaseline.png

サンプルコード

JCheckBox check1 = new JCheckBox("JComponent.setAlignmentY(...)");
Dimension d = check1.getPreferredSize();
int baseline = check1.getBaseline(d.width, d.height);
check1.setAlignmentY(baseline/(float)d.height);
textPane.replaceSelection("\n\n Baseline: ");
textPane.insertComponent(check1);
View in GitHub: Java, Kotlin

解説

  • 上: `Default`
    • `JTextPane#insertComponent(...)で、JCheckBox`を追加
    • `JCheckBoxのデフォルトのAlignmentY0.5`なのでテキストのベースラインと揃わない
  • 中: `JComponent#setAlignmentY(...)`
    • `JComponent#getBaseline()でベースラインを取得し、JComponent#setAlignmentY(baseline/(float)d.height)`でテキストベースラインの相対位置に配置
  • 下: `setAlignmentY+setCursor+...`
    • 「中: `JComponent#setAlignmentY(...)」+Cursor+Opaque+Focusable`を設定
check2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
check2.setOpaque(false);
check2.setFocusable(false);

参考リンク

コメント