フィールド系部品(JFFieldクラスの継承クラス)と埋め込みフィールド部品(JFFieldFilledクラス)で、日本語入力システムを利用して文字を入力しているときに、フォーカスが移動した場合の動作について説明します。
以前のバージョンでは、入力中に別の部品にフォーカスを移動するなどの操作を行い、フォーカスが失われた場合は、入力していた文字列が部品に設定されませんでした。当バージョンは、Java2で正式にサポートされたインプットメソッドフレームワークの動作に準拠しており、同様の操作を行った場合は入力中の文字列が部品に設定されます。
上記のような操作を行った場合に、入力中の文字列を設定せずにキャンセルする場合は、部品がフォーカスを失ったタイミングで日本語の未確定入力状態を解除します。
例
入力中の文字列をキャンセルする処理の例
以下の例では、フォーカスアダプタを利用して JFFieldString 部品から別の部品にフォーカスが移動した場合に、入力中の文字列が設定されないようにしています。
/** * JFFieldString を貼りつけるアプレット */ public class MySampleApplet extends Applet { /* * JFFieldStringクラス */ JFFieldString fieldString = new JFFieldString(); /** * アプレットの実行開始時に一度だけ呼び出されるメソッド */ public void init() { : // 入力を行う部品にフォーカスアダプタを登録 fieldString.addFocusListener(new MyFocusAdapter()); : } : } /** * 部品がフォーカスを失ったタイミング、日本語の未確定入力状態を解除する * ためのアダプタ */ class MyFocusAdapter extends FocusAdapter { public void focusLost(FocusEvent focusEvent) { Component component = (Component) focusEvent.getSource(); //未確定入力状態取り消し component.getInputContext().endComposition(); //部品の描画上の未確定入力状態を取り消し //ダミーのInputMethodEventを通知する InputMethodEvent inputMethodEvent = new InputMethodEvent( component, InputMethodEvent.INPUT_METHOD_TEXT_CHANGED, null, null); component.dispatchEvent(inputMethodEvent); } } |