Swing/FirstCharToUpperCase のバックアップの現在との差分(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/FirstCharToUpperCase へ行く。
- 1 (2010-03-01 (月) 12:38:41)
- 2 (2010-03-04 (木) 19:28:00)
- 3 (2010-03-08 (月) 14:53:09)
- 4 (2011-06-26 (日) 01:17:01)
- 5 (2011-06-27 (月) 19:21:21)
- 6 (2012-10-19 (金) 20:10:12)
- 7 (2013-01-02 (水) 14:26:43)
- 8 (2013-05-26 (日) 04:54:59)
- 9 (2015-01-08 (木) 14:01:57)
- 10 (2015-11-27 (金) 17:44:03)
- 11 (2017-01-06 (金) 19:16:42)
- 12 (2017-04-04 (火) 15:11:18)
- 13 (2018-03-18 (日) 10:03:27)
- 14 (2020-03-20 (金) 19:46:42)
- 15 (2021-09-26 (日) 09:47:18)
- 16 (2023-05-08 (月) 12:23:39)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:DocumentFilterで先頭文字を大文字に変換する #navi(../) #tags() RIGHT:Posted by &author(aterai); at 2010-03-01 *DocumentFilterで先頭文字を大文字に変換する [#kb40e964] DocumentFilterを使って、文字列の先頭が常に大文字になるように設定します。 --- 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] `DocumentFilter`を使って、文字列の先頭が常に大文字になるように設定します。 -&jnlp; -&jar; -&zip; #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTMuU7OQ-I/AAAAAAAAAZo/jnaPTnPJY4w/s800/FirstCharToUpperCase.png) //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTMuU7OQ-I/AAAAAAAAAZo/jnaPTnPJY4w/s800/FirstCharToUpperCase.png) **サンプルコード [#c5239278] * サンプルコード [#sourcecode] #code(link){{ class FirstCharToUpperCaseDocumentFilter extends DocumentFilter { private final JTextComponent textArea; public FirstCharToUpperCaseDocumentFilter(JTextComponent textArea) { private final JTextComponent textField; protected FirstCharToUpperCaseDocumentFilter(JTextComponent textField) { super(); this.textArea = textArea; this.textField = textField; } @Override public void insertString( FilterBypass fb, int offset, String text, AttributeSet attrs) @Override public void remove( DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException { if(text==null) return; replace(fb, offset, 0, text, attrs); } @Override public void remove( FilterBypass fb, int offset, int length) throws BadLocationException { Document doc = fb.getDocument(); if(offset==0 && doc.getLength()-length>0) { fb.replace(0, length+1, doc.getText(length, 1).toUpperCase(), null); textArea.setCaretPosition(0); }else{ fb.remove(offset, length); 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( FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { if(offset==0 && text!=null && text.length()>0) { text = text.substring(0,1).toUpperCase()+text.substring(1); 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, text, attrs); fb.replace(offset, length, str, attrs); } } }} **解説 [#g58b7cc5] 上記のサンプルでは、JTextFeildに入力された文字列の先頭一文字が、常に大文字になるように変換するDocumentFilterを設定しています。 * 解説 [#explanation] 上記のサンプルでは、`JTextField`に入力された文字列の先頭一文字が、常に大文字になるように変換する`DocumentFilter`を設定しています。 ---- 以下のように、JFormattedTextField + MaskFormatterを使うと、先頭文字を削除した場合などで空白文字が挿入される(長さが決まっているから?)。 - `JFormattedTextField` + `MaskFormatter`を使用すると指定した文字列長に足りない場合などでアンドゥが実行される #code{{ JFormattedTextField field1 = new JFormattedTextField(new MaskFormatter("ULLLLLLLLLL")); field1 = new JFormattedTextField(new MaskFormatter("ULLLLLLLLLL")); }} **コメント [#yc833a25] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/text/DocumentFilter.html DocumentFilter (Java Platform SE 8)] * コメント [#comment] #comment #comment