テキスト入力関連のコンポーネント
続いて、テキスト入力関連です。すでにTextFieldは使いましたが、この他にもパスワードを入力するPasswordField、複数行のテキストを入力するTextAreaなどがあります。
void makeContent(Component component){
TextField field1 = new TextField();
component.add(field1);
PasswordField field2 = new PasswordField();
component.add(field2);
final TextArea area = new TextArea();
component.add(area);
field1.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void documentUpdate(DocumentEvent ev) {
Document doc = (Document)ev.getSource();
area.setText(doc.getText());
}
});
field1.set(TextComponentPeer.PROPERTY_SYNC_MODE,
new Integer(TextComponentPeer.SYNC_ON_CHANGE));
field1.set(TextComponentPeer.PROPERTY_SYNC_DELAY, new Integer(250));
}

例として、3つのテキスト入力用コンポーネントを並べて表示するサンプルを挙げておきます。先ほどのHeloAppにある「makeContent」メソッドだけを修正してください。また、単に表示するだけでは面白くないので、今回はTextFieldにテキストを書くと、それがTextAreaにも自動的に書き出されるようにしてみました。
各コンポーネントの作成は、単にnewするだけで非常に単純です。今回のポイントは、テキストを変更した時のイベント処理です。これらのテキスト入力用コンポーネントには、コンポーネントの内容を管理する「Document」というクラスのインスタンスが設定されています。これは、テキスト入力関連コンポーネントのモデルクラスであり、このDocumentの内容が変更されると、DocumentEventというイベントが発生して、DocumentListenerというイベントリスナーで処理することができます。ここではfield1を作成した後、
field1.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void documentUpdate(DocumentEvent ev) {……略……}
});
このようにしてDocumentの変更の処理を追加しています。TextFieldの「getDocument」でDocumentインスタンスを取得し、その「addDocumentListener」を使ってDocumentListenerインスタンスを設定しています。これで、Documentの内容(すなわち、このDocumentが設定されているTextFieldに書かれているテキスト)が変更されると、documentUpdateが呼び出されます。
ただし、デフォルトの状態では、テキストを変更してもdocumentUpdateは呼び出されません。どうやらデフォルトでは、クライアント側に表示される内容が変更されても、すぐにはサーバー側のDocumentに反映されないようなのです。そこで、クライアント=サーバー間の同期に関する設定を変更しておく必要があります。
field1.set(TextComponentPeer.PROPERTY_SYNC_MODE,
new Integer(TextComponentPeer.SYNC_ON_CHANGE));
field1.set(TextComponentPeer.PROPERTY_SYNC_DELAY, new Integer(250));
setは、第1引数に指定したプロパティの値を第2引数の値に設定するものです。ここでは、TextComponentPeerクラスに用意されている「PROPERTY_SYNC_MODE」「PROPERTY_SYNC_DELAY」というクラスフィールドのプロパティを変更しています。これらは同期モードと同期までのディレイ(待ち時間)に関するもので、ここでは「クライアント側の値が修正されたらすぐに同期を行う」「250ミリ秒遅れで同期を開始する」というようにしてます。
この記事は参考になりましたか?
- Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧
-
- Javaで軽快に使える「軽量フレームワーク」特集 ~サーバーサイドとクライアントサイドのど...
- Javaで軽快に使える「軽量フレームワーク」特集 ~サーバーサイドとクライアントサイドのど...
- Javaで軽快に使える「軽量フレームワーク」特集 ~クールなGUIをシンプルなスクリプトで...
- この記事の著者
-
掌田 津耶乃(ショウダ ツヤノ)
三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
