ページの先頭行へ戻る
Interstage Studio J Business Kit GUIライブラリ ユーザーズガイド
FUJITSU Software

C.3.3 入力中のフォーカス移動

フィールド系部品(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);

    }
}