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