Swing/InsertComponentBaseline のバックアップの現在との差分(No.1)
TITLE:JTextPaneに追加するコンポーネントのベースラインを揃える
Posted by aterai at 2012-09-03
JTextPaneに追加するコンポーネントのベースラインを揃える
JTextPaneに追加するコンポーネントのベースラインが他の文字列などとを揃うように設定します。- category: swing folder: InsertComponentBaseline title: JTextPaneに追加するコンポーネントのベースラインを揃える tags: [JTextPane, JComponent, Baseline] author: aterai pubdate: 2012-09-03T06:06:39+09:00 description: JTextPaneに追加するコンポーネントのベースラインが他の文字列などとを揃うように設定します。 image:
概要
JTextPane
に追加するコンポーネントのベースラインが他の文字列などとを揃うように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
JCheckBox check1 = new JCheckBox("JComponent.setAlignmentY(...)");
Dimension d = check1.getPreferredSize();
int baseline = check1.getBaseline(d.width, d.height);
#spandel
check1.setAlignmentY(baseline/(float)d.height);
#spanend
#spanadd
check1.setAlignmentY(baseline / (float) d.height);
#spanend
textPane.replaceSelection("\n\n Baseline: ");
textPane.insertComponent(check1);
View in GitHub: Java, Kotlin解説
- 上: Default
- JTextPane#insertComponent(...)で、JCheckBoxを追加
- JCheckBoxのデフォルトのAlignmentYは0.5なのでテキストのベースラインと揃わない
- 中: JComponent#setAlignmentY(...)
- JComponent#getBaseline()でベースラインを取得し、JComponent#setAlignmentY(baseline/(float)d.height)でテキストベースラインの相対位置に配置
- 下: setAlignmentY+setCursor+...
- 「中: JComponent#setAlignmentY(...)」+Cursor+Opaque+Focusableを設定
解説
-
Default
-
JTextPane#insertComponent(...)
メソッドでJCheckBox
を追加 -
JCheckBox
のデフォルトAlignmentY
は0.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);
-
参考リンク
- JTextPane (Java Platform SE 6)
- 引用: コンポーネントは、Component.getAlignmentY によって返された値に従って、テキストベースラインに相対的に配置されます。Swing コンポーネントの場合、JComponent.setAlignmentY メソッドを使うと、この値を簡単に設定できます。たとえば、値を 0.75 に設定すると、コンポーネントの 75 パーセントがベースラインの上に、25 パーセントがベースラインの下になります。
- java - How to appropriately adding JLabel to JEditorPane? - Stack Overflow
参考リンク
- JTextPane#insertComponent(Component) (Java Platform SE 8)
「コンポーネントは、
Component.getAlignmentY
によって返された値に従って、テキストベースラインに相対的に配置されます。Swing
コンポーネントの場合、JComponent.setAlignmentY
メソッドを使うと、この値を簡単に設定できます。たとえば、値を0.75
に設定すると、コンポーネントの75%
がベースラインの上に、25%
がベースラインの下になります。」