---
category: swing
folder: TextAttribute
title: JTextFieldの文字列に下線を付ける
tags: [JTextField, JTextArea, Font, TextAttribute]
author: aterai
pubdate: 2013-10-28T00:39:37+09:00
description: JTextFieldにテキスト属性を設定したフォントを使用して、文字列に下線を引きます。
image: https://lh4.googleusercontent.com/-OkP81Y9wnSg/Um0wk_H3a5I/AAAAAAAAB5A/KfDBXqlXF3o/s800/TextAttribute.png
---
* 概要 [#summary]
`JTextField`にテキスト属性を設定したフォントを使用して、文字列に下線を引きます。

#download(https://lh4.googleusercontent.com/-OkP81Y9wnSg/Um0wk_H3a5I/AAAAAAAAB5A/KfDBXqlXF3o/s800/TextAttribute.png)

* サンプルコード [#sourcecode]
#code(link){{
Font font = textField.getFont();
Map<TextAttribute, Object> attrs = new HashMap<>(font.getAttributes());
attrs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_DOTTED);
textField.setFont(font.deriveFont(attrs));
// ...
enum UnderlineStyle {
  UNDERLINE_OFF(-1),
  UNDERLINE_LOW_DASHED(TextAttribute.UNDERLINE_LOW_DASHED),
  UNDERLINE_LOW_DOTTED(TextAttribute.UNDERLINE_LOW_DOTTED),
  UNDERLINE_LOW_GRAY(TextAttribute.UNDERLINE_LOW_GRAY),
  UNDERLINE_LOW_ONE_PIXEL(TextAttribute.UNDERLINE_LOW_ONE_PIXEL),
  UNDERLINE_LOW_TWO_PIXEL(TextAttribute.UNDERLINE_LOW_TWO_PIXEL),
  UNDERLINE_ON(TextAttribute.UNDERLINE_ON);
  public final int style;
  private UnderlineStyle(int style) {
  private final int style;

  UnderlineStyle(int style) {
    this.style = style;
  }

  public int getStyle() {
    return style;
  }
}
}}

* 解説 [#explanation]
上記のサンプルでは、`Font#deriveFont(...)`メソッドに下線の属性キーに点線や破線の属性値を設定した`TextAttribute`のマップを適用して、下線属性の付いた新しい`Font`オブジェクトを生成しています。

- `JTextArea`の下にある`JTextField`のようにコンポーネントの高さが足りないと下線の種類によっては表示されない場合がある

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/font/TextAttribute.html TextAttribute (Java Platform SE 8)]
- [https://stackoverflow.com/questions/19478966/is-it-possible-to-underline-text-on-jtextfieldif-yes-how java - Is it possible to underline text on JTextField?If Yes, How? - Stack Overflow]

* コメント [#comment]
#comment
#comment