---
category: swing
folder: FirstCharToUpperCase
title: DocumentFilterで先頭文字を大文字に変換する
tags: [JTextField, DocumentFilter]
author: aterai
pubdate: 2010-03-01T12:38:41+09:00
description: DocumentFilterを使って、文字列の先頭が常に大文字になるように設定します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMuU7OQ-I/AAAAAAAAAZo/jnaPTnPJY4w/s800/FirstCharToUpperCase.png
---
* Summary [#summary]
`DocumentFilter`を使って、文字列の先頭が常に大文字になるように設定します。
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMuU7OQ-I/AAAAAAAAAZo/jnaPTnPJY4w/s800/FirstCharToUpperCase.png)
* Source Code Examples [#sourcecode]
#code(link){{
class FirstCharToUpperCaseDocumentFilter extends DocumentFilter {
private final JTextComponent textField;
protected FirstCharToUpperCaseDocumentFilter(JTextComponent textField) {
super();
this.textField = textField;
}
@Override public void remove(
DocumentFilter.FilterBypass fb, int offset, int length)
throws BadLocationException {
Document doc = fb.getDocument();
if (offset == 0 && doc.getLength() - length > 0) {
fb.replace(length, 1,
doc.getText(length, 1).toUpperCase(Locale.ENGLISH), null);
textField.setCaretPosition(offset);
}
fb.remove(offset, length);
}
@Override public void replace(
DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
String str = text;
if (offset == 0 && Objects.nonNull(text) && !text.isEmpty()) {
str = text.substring(0, 1).toUpperCase(Locale.ENGLISH) + text.substring(1);
}
fb.replace(offset, length, str, attrs);
}
}
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは、`JTextField`に入力された文字列の先頭一文字が、常に大文字になるように変換する`DocumentFilter`を設定しています。
- `JFormattedTextField` + `MaskFormatter`を使用すると指定した文字列長に足りない場合などでアンドゥが実行される
#code{{
field1 = new JFormattedTextField(new MaskFormatter("ULLLLLLLLLL"));
}}
* Reference [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/DocumentFilter.html DocumentFilter (Java Platform SE 8)]
* Comment [#comment]
#comment
#comment