JavaTM プラットフォームでのインプットメソッドの使用
著者: 佐藤 直人
これは2002年9月に掲載された記事の更新版です。
元の記事は The Swing Connection でご覧いただけます。
Java 2 Runtime Environment バージョン 5.0 でサポートされている Unicode Standard 4.0 にいったい何文字くらい定義されているか、ご存知ですか?
なんと 96,382 もあるのです!1
これらの文字を Java アプリケーション中でどうやって入力すればいいのか、知りたいと思っている方もいらっしゃることでしょう。
そこで使われるのがインプットメソッドです。
インプットメソッドを使うと、一度のキーストロークで直接は表現できない文字でも入力することができます。
一連のキーストロークをもとに前もってテキストを変換し、変換が完了した後で最終的に望ましいテキストをドキュメントに挿入することができるのです。
Java 2 Development Environment では、テキストコンポーネントとインプットメソッドの連携のために、インプットメソッドフレームワークが提供されています。
このフレームワークを使って、Swing のテキストコンポーネントで オンザスポット つまり インライン 変換(変換されたテキストがすぐに視覚的かつ論理的にテキスト記憶領域に挿入されるスタイルの変換)を行うことができます。
具体的には、インプットメソッドフレームワークのクライアント API を使ってこのオンザスポットの編集方式を可能にしています。
また、インプットメソッドフレームワークのエンジン SPI を使うと、あなたのお気に入りのインプットメソッドを Java の実行環境で使うことができます。
他の Java アプリケーションと同様に、インプットメソッドは Java の実行環境さえあれば、どんなプラットフォームの上でも使うことができます。
さらに、アプリケーションと違って、Javaベースのインプットメソッドでは、プラットフォーム固有のインプットメソッドではまず提供されていないプラットフォーム非依存の共通ユーザインタフェースを享受できます。
この記事では、Swing のテキストコンポーネント中でどうやってインプットメソッドを使えばよいかを説明します。
対象は、Java 2 Runtime Environment バージョン 1.4.0 以降と、各バージョンの Supported Locales ドキュメント(バージョン 1.4.2 | バージョン 5.0 )に記載されているオペレーティングシステムです。
この記事の内容は次のとおりです:
インプットメソッドのインストール
インプットメソッドのインストールはとても簡単です。
JAR アーカイブ形式で提供されるファイルを拡張ディレクトリに置くだけでよいのです。
デフォルトの拡張ディレクトリは lib/ext ですが、実行時にシステムプロパティ java.ext.dirs を指定すれば、別のディレクトリを拡張ディレクトリとして使うこともできます。
この記事で使用するサンプルのインプットメソッド City Input Method はここにあります。
ダウンロードしたファイル CityIM.jar を拡張ディレクトリにコピーしてください - これでインストール完了です!
インプットメソッドの選択
拡張ディレクトリにインプットメソッドがインストールされた環境で Swing のテキストコンポーネントを使うアプリケーションを実行すると、SolarisTM や Microsoft Windows の System メニュー中に次のような追加項目が表示されます:

Select Input Method (日本語環境では 入力方式の選択 ) を選択すると、次のようなポップアップメニューが表示されます:
メニューには、この実行環境で使用可能なすべてのインプットメソッドの一覧が表示されます。
オペレーティングシステム側で提供しているインプットメソッドの一覧は、System Input Methods (日本語環境では システム入力方式 ) サブメニュー中に表示されます。
区切り線の下に表示されているインプットメソッドは、Javaベースのインプットメソッドです。
今ここでは多言語対応のインプットメソッドである City Input Method を選択します。
すると、サポートされている言語の一覧がサブメニューに表示されます。
ユーザロケールが日本語に設定されており、かつそのインプットメソッドが和訳テキストを用意している場合には、メニューは日本語で表示されます。
インプットメソッドの使用
使いたいインプットメソッドをポップアップメニュー中で選択します。
ここでは上の図中で反転している日本語の City Input Method を選んでみましょう。
すると、画面の右下に小さなポップアップウィンドウが表示されます。
これによって City Input Method - 日本語 が選択されたことを確認できます。
キーボードから s, f, o と入力してみてください。
下線(環境によっては破線の下線)つきのテキスト sfo が表示されます。
下線は、その文字列 sfo がまだコンポジション・モードにあり、確定されていないことを示しています。
このようなタイプの編集は、しばしば 事前変換( pre-composing )と呼ばれます。
City Input Method は SFO や NRT などの IATA 空港コード( 3 レターコード)を都市名に変換するインプットメソッドで、Space キーを押すと数種類の言語で表された都市名の候補を見ることができます。
どの候補を選ぶか決めたら、あらかじめ変換済みの文字列を 確定 してください。
一般的に、Return キーが確定に使われます。
この例では、確定済みのテキストは次のようになります。
ホットキーによるインプットメソッドの選択
システムメニュー中に Select Input Method メニューを持たないプラットフォーム(例: Linux )やブラウザ内で動作するアプレットのために、ユーザが定義したホットキーでインプットメソッドを選択する方法が提供されています。
これは、システムメニュー中にインプットメソッドの選択メニューを持つ Solaris CDE デスクトップや Microsoft Windows などのプラットフォームにおいても便利な方法です。
ホットキーを押すと、システムメニューからポップアップするのと同じインプットメソッド選択メニューが表示されます。
下のボタンをクリックして、ホットキーの組み合わせ設定用の インプットメソッド ホットキーツール をダウンロードしてください。
そして、次のように実行してください:
java -jar InputMethodHotKey.jar [-system]
すると、次のようなポップアップウィンドウが立ち上がります:
好みに合わせてホットキーを設定した後、Swing のテキストコンポーネント上でその組み合わせを押してみてください。
インプットメソッド選択用のポップアップメニューが表示されるはずです。
また、マルチユーザのプラットフォーム用に、-system オプションが用意されています。
-system オプションで設定されたホットキーは、すべてのユーザに対して有効です。
その他のインプットメソッド実装例
これまで、Swing コンポーネント中で City Input Method がどのように動作するかを見てきました。ここでは便利な、しかしサポートはされていないインプットメソッドを幾つか紹介します。
コードポイント インプットメソッド
コードポイント インプットメソッド は、Unicode 文字を入力するためのシンプルなインプットメソッドです。
文字リテラルの \uxxxx 表記を使って十六進数のコードポイントを入力します。
通常このインプットメソッドは入力された文字を変換せずにアプリケーションに渡しますが(パススルー・モード)、\ が入力されるとコンポジション・モードに入ります。
コンポジション・モードでは、ユーザは \uxxxx 表記( x は十六進数 0-9, a-f, A-F の中のどれか一文字)を使って目的のコードポイントを入力します。
有効なシーケンスが入力されたところで、対応する Unicode 文字に変換・確定されます。
そして、インプットメソッドは再度 \ が入力されるまでパススルー・モードで動作します。
コンポジション・モードでは、左右の矢印キー、Backspace そして Delete キーを使って変換テキストを編集することができます。
\u は作成中の変換テキスト中で最後尾にある時、つまり後続の文字がない時にだけ削除することができます。
\u を消して変換テキストが空になると、インプットメソッドはパススルー・モードに戻ります。
\ はコンポジション・モード開始のトリガに使われているため、テキスト中に \ を一つ入力したい場合、二度タイプする必要があります。
\ が一度のみタイプされ、かつ次の文字が u でない場合、\ と後続の文字の両方が確定され、インプットメソッドはパススルー・モードに戻ります。
コードポイント インプットメソッド は、下のボタンからダウンロード可能です。
ここで紹介したコードポイント インプットメソッドの更新版が、
Java 2 SDK バージョン 5.0
にデモプログラムとして入れられています。 そちらを使うと、基本多言語面(BMP: Basic Multilingual
Plane)外のコードポイント、つまり U+10000 から U+10FFFF までのコードポイントを持つ補助文字(supplementary
character)を入力することができます。 詳細については、Java 2 SDK の README ファイルをご覧ください。
インド系スクリプト インプットメソッド
このインプットメソッドの JAR アーカイブファイルには、インドで使われている何種類かのスクリプト(writing
script)とそれらを入力するためのインプットメソッドが含まれています。 具体的には、Java 2 Runtime Edition
バージョン 1.4.0 以降で正式にサポートされている書記法(writing system)の一つであるデバナガリと、ベンガル、グジャラート,
グルムキー、カンナダ、マラヤーラム、オリヤー、タミルおよびテルグのスクリプトがサポートされています。 このインプットメソッドは、US
101/104 キーボードレイアウトを前述の 9 つのスクリプトで使われている INSCRIPT レイアウトにマッピングします。
スクリプトごとのキーボードレイアウトについてはこちらを、ラテン・アルファベットから各スクリプトへのマッピングテーブルについてはこちらをご覧ください。
インド系スクリプト インプットメソッドは、下のボタンからダウンロード可能です。
タイ語インプットメソッド
このインプットメソッドは Thai API Consortium's "WTT" Input/Output Methods の資料中で定義されているタイ語の入力シーケンスチェックを実装したインプットメソッドです。
US 101/104 キーボードレイアウトを Thai TIS820-2538 レイアウトにマッピングします。
ラテン・アルファベットからタイ語スクリプトへのマッピングテーブルについてはこちらをご覧ください。
タイ語インプットメソッドは、下のボタンからダウンロード可能です。
詳細について
インプットメソッドフレームワークについて、さらに詳しいことをお知りになりたい方は
こちらをご覧ください。
また、情報交換には
Java 国際化フォーラムをご活用ください。
Java 国際化チームへのフィードバックは
こちらで受け付けています。
1: 図形文字と書式文字の総数