JFFieldクラスの継承クラス、JFFieldFilledクラス、JFTextAreaクラス(以下、テキスト編集部品)では入力フォーカスを得た場合、自動的に日本語入力システムの状態を変更する機能(日本語入力システム制御機能)を提供しています。
注意
日本語入力システム制御機能は、オペレーティングシステムに依存した処理にて実現しています。このため、本機能を使用した場合、100% Pure Javaではなくなります。
指定可能な日本語入力システムの状態には以下の情報があります。
入力モード
入力モードは入力を行うときの文字種および文字の大きさのことです。
以下の識別子を論理和(|)で連結した値を指定することができます。
種類 | テキスト編集部品に定義されている識別子 | 識別子が表す文字の種類 |
---|---|---|
文字種 | MODE_NATIVE | 直接入力 |
MODE_ALPHANUMERIC | 英数字 | |
MODE_KATAKANA | カタカナ | |
MODE_HIRAGANA | ひらがな | |
文字の大きさ | MODE_ZENKAKU | 全角 |
MODE_HANKAKU | 半角 |
入力スタイル
入力スタイルは、入力中の文字列を表示する形式のことです。Java SEのInput Method Frameworkを使用して実現しています。
以下の識別子のいずれかを指定することができます。
テキスト編集部品に定義されている識別子 | 文字列の表示形式 |
---|---|
STYLE_DEFAULT_POSITION | 日本語入力システムのデフォルトの位置で編集を行います。 |
STYLE_OVER_THE_SPOT | 入力中の文字列は、テキスト編集部品のキャレット位置以降に表示されます。 |
日本語入力時のフォーカス移動
日本語入力において、インライン編集中にフォーカスを移動したり、別アプリケーションへの切替えを行ったりすると、フォーカスが切り替えた先に移動しない、入力中の文字が残るという現象が発生します。このため、インライン編集の完了後に、フォーカスの移動、別アプリケーションへの切替えを行ってください。
注意
GUIライブラリの文字入力部品で以下の操作をすると、setInputMode(int mode)で指定した入力モードに切り替わらない場合があります。
以下のいずれかの部品に対してsetAutoIME(true)を指定する。
JFChoice
JFField
JFFieldDate
JFFieldDouble
JFFieldFilled
JFFieldFilledDate
JFFieldLong
JFFieldString
JFFieldRichString
JFTextArea
1.の部品に対してsetInputMode(int mode)メソッドで日本語入力システムの入力モードを指定する。
メモ帳等の他のアプリケーションから、2.の部品にフォーカスを移動する。
[対処方法]
以下の手順で、入力の切り替え機能の設定を変更してください。
Windows 10、Windows Server 2019の場合
[スタート] をクリックし、 [スタートメニュー] から [設定] を開きます。
[デバイス] をクリックします。
[入力]をクリックし、 [キーボードの詳細設定] をクリックします。
[入力方式の切り替え] の [アプリ ウィンドウごとに異なる入力方式を設定する] チェックボックスをオンにします。
上記以外のOSの場合
[コントロール パネル] を開きます。
[時計、言語、および地域] から [言語]-[詳細設定] をクリックします。
[入力方式の切り替え] の[アプリごとに異なる入力方式を設定する] チェックボックスをオンにします。
[保存] をクリックします。
アプリケーションの終了時に必要な処理
以下の日本語入力システム制御機能を利用する部品を使用したアプリケーションに必要となる、終了時の処理について説明します。
日本語入力システム制御機能を持つ部品(テキスト編集部品)
JFFieldクラスの継承クラス、JFFieldFilledクラス、JFTextAreaクラス、テキスト編集部品を標準で利用している部品
JFTableViewクラス、JFTreeクラス、JFChoiceクラス
JFTableViewクラス/JFTreeクラス/JFChoiceクラスの部品を継承している部品
アプリケーションの終了時には、日本語入力システム制御機能を利用する部品を破棄する必要があります。破棄しないままアプリケーションを終了した場合には、日本語入力システムを制御するネイティブのライブラリ内で確保された資源が解放されません。
日本語入力システムを制御するネイティブのライブラリで確保された資源は、日本語入力システム制御機能を利用する部品がすべて破棄されたときに、一緒に解放されます。
部品を破棄するには、部品を貼り付けたウィンドウを削除する必要があります。ウィンドウの削除には、Windowクラスのdispose()メソッドを用います。アプリケーションの終了時には、アプリケーションのウィンドウに対して、必ずdispose()メソッドを呼び出してから終了するようにしてください。
ただし、日本語入力システム制御機能を利用する部品をアプレットに貼り付け、appletviewerなどのブラウザを用いてアプレットを実行した場合には、ブラウザがそのアプレットのdispose()メソッドを自動的に呼び出します。したがって、ユーザがアプレットのウィンドウに対してdispose()メソッドを呼び出す必要はありません。
ポイント
IMEで変換確定前のキー入力を検知する方法
IMEからのキー入力を検知したい場合は、java.awt.event.InputMethodEventを使用します。
InputMethodEventはIMEの変換ウィンドウの内容が変更されたときに通知され、java.awt.event.InputMethodListenerで受け取ることができます。java.awt.event.KeyEventではIMEが有効な場合のキー入力では発生しません。