ユーザインタフェース 10章 テキスト・コンポーネント
- 10.1. javax.swing.JTextField
- 10.2. javax.swing.JTextArea
- 10.3. javax.swing.text.Document
10.3. javax.swing.text.Document
「JTextField」も「JTextArea」も内部データの管理を、「Document」インタフェースを実装したクラスで行っています。このインタフェースを実装する事により、数字しか受け付けないテキストフィールドなどを作成する事ができます。
1. class SampleDocument extends PlainDocument{ 2. public void insertString(int offset, String text, AttributeSet attributes){ 3. throws BadLocationException{ 4. try{ 5. Integer.parseInt(text); 6. }catch(NumberFormatException e){ 7. return; 8. } 9. super.insertString(offset,text,attributes); 10. } 11.}
以上は数字しか受け付けないテキストコンポーネントのためのドキュメントクラスです。「JTextField」も「JTextArea」もどちらも文字毎にフォントなどの属性を設定できないので、最も簡単な「PlainDocument」クラスを拡張して作成しています。
「insertString」は文字列が追加されたときに呼ばれるメソッドです。3行目の「throws BadLocationException」はこのメソッドが「BadLocationException」例外を発生する可能性があることを示しています。
5行目で入力文字列へ数字に変換していますが、入力文字列が数字で無い場合は「NumberFormatException」が発生します。この例外を補足して例外処理に移り、入力文字列を追加せずに「return」しているのです。例外が発生しない場合は9行目で入力文字列の追加を実行しています。
(実習課題3)
以下のプログラムを作成しなさい。
- ウィンドウに含まれるコンポーネントはテキストフィールド1つ。そのテキストフィールドが持つ特徴は以下のとおり。
- 4文字までしか入力する事ができない。
- 「a」を入力しようとすると、「b」が入力される。
- 文字を削除しようとすると、その左となりの文字が削除される。
- 「Document」インタフェースを利用して作成する事。
- (ヒント)「remove」メソッドを実装する事。