- PR -

SwingアプリでIME制御

1
投稿者投稿内容
elwood
会議室デビュー日: 2003/07/24
投稿数: 12
投稿日時: 2004-08-26 10:13
おはようございます。
現在、Swingを利用したアプリケーションを作成しています。
ここでは、例えば、マスタメンテのようなGUI画面だとします。
環境はWindows限定で話を進めさせてもらいます。

このようなマスタメンテや業務系のアプリの場合、
項目によってIMEの制御を行なって、自動で半角/全角や
英数字などで入力させる場合が多いと思います。

Javaからは直接Win32APIをコールする事ができない、というのは
いろいろ調べていくうちにわかりました。

ここで皆さんに質問なのですが、このようなIMEの制御を
行いたい場合、他にどのような手段があるのかアドバイスを
いただけないでしょうか。

Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-08-26 10:24
elwoodさん、こんにちは。

java.awt.im.InputContext#selectInputMethod(Locale)
どうでしょうか。
未記入
大ベテラン
会議室デビュー日: 2003/11/24
投稿数: 121
投稿日時: 2004-08-26 10:40
いまはどうか知らんけど、昔は selectInputMethod(Locale) はダメだったなあ。
java.awt.im.InputContext#setCharacterSubsets(Character.Subset[]) を
使うのが正しいらしいよ。Java House で設計に関わった人がそう言ってた。

あと↓ここも参考になると思う。
http://satoshi.kinokuni.org/tech/SwingTipsString.html#section3
elwood
会議室デビュー日: 2003/07/24
投稿数: 12
投稿日時: 2004-08-26 10:49
Kissingerさん、未記入さん、回答ありがとうございます。

今、APIドキュメントや参考リンクを参照しましたが、
完全に制御できるわけではなさそうですね。
とりあえず、この二つを参考にプログラムしてみます。

引き続き、他にも参考リンクなどございましたら
よろしくお願いします。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-08-26 10:55
未記入さんも書かれていますが、setCharacterSubsets(Character.Subset[] subsets)を使用します。
FocusAdapterを継承したクラスでこんな感じに私は書いて使ってました。
コード:
    public void focusGained( FocusEvent e ) {
        
        JComponent component = ( JComponent )( e.getSource() );
        
        // 全角入力
        if( flag ){
            component.getInputContext().setCharacterSubsets(new Character.Subset[] {InputSubset.KANJI});
        }
        // 半角入力
        else{
            component.getInputContext().setCharacterSubsets( null );
        }
        
    }


参考になればいいのですが・・・
elwood
会議室デビュー日: 2003/07/24
投稿数: 12
投稿日時: 2004-08-26 11:43
想馬さんが書いていただいたサンプルコードで
無事動作致しました。
Kissingerさん、未記入さんの参考サイトで概要を掴む事ができ、
想馬さんのサンプルコードで、そのものズバリで動作しました。

皆さんありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)