アプリ版:「スタンプのみでお礼する」機能のリリースについて

JTextFieldの機能を自作しようとしています。
入力された半角文字は、getKeyChar()で取得できたのですが、このままgetKeyChar()を使うと、一文字の全角文字なら取得できますが、確定後の全角文字列は最後の1文字しか取得できません。

そこでいろいろ調べていると、変換中や確定後の文字列を取得するには、InputMethod関連を使うと良いようなのですが、実装の仕方がよく分かりません。
どのように記述すれば文字列を取得できるのでしょうか。

A 回答 (2件)

> 入力された半角文字は


どこへ、何に、入力しているのか、とか、やろうとしていることの全貌がわからん。スモール サンプル コード、プリーズ!
    • good
    • 0
この回答へのお礼

申し訳ありません。
実現したいことは、キーボードから日本語の入力を取得することです。

要点だけ抜き出したソースです。
public class A extends JPanel implement KeyListener
{
private char keyChar;
public A()
{
setFocusable(true);
addKeyListener(this);
}

public void keyTyped(KeyEvent e)
{
keyChar = e.getKeyChar();
}

public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}

この形で、文字入力モードが半角英数になっているとき、どこかのキーが押されたら、そのキーを取得できました。
アドバイスを頂きたいのは、文字入力モードが全角だった場合の取得方法です。
例えば
1:t,a,n,g,oキーを押す
2:変換する
3:確定する(結果「単語」という文字列になる)
という動作があったとします。
ここで、その結果(単語)を取得したいです。

お礼日時:2007/11/16 01:08

以下は簡単すぎて実用性ゼロですが、だいたいこんな感じです(これはパッシブクライアントの例)。


詳しくは、java.awt.imパッケージの関連ドキュメンテーションをお勉強してください。サンプルプログラムも豊富に提供されていますから、勉強に行き詰まることはないと思います。
----------------------------------------------
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class AAA extends JPanel implements KeyListener{
private char keyChar;
StringBuffer sb;

public AAA(){
sb = new StringBuffer();
enableInputMethods(true);
setFocusable(true);
addKeyListener(this);
setPreferredSize(new Dimension(200, 100));
}

public void keyTyped(KeyEvent e){
sb.append(keyChar = e.getKeyChar());
repaint();
}

public void paintComponent(Graphics g){
super.paintComponent(g);

if (sb != null){
g.drawString(sb.toString(), 10, 20);
}
}

public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}

/* main() for test */
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container con = frame.getContentPane();
con.add(new AAA(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
----------------------------------------------

参考URL:http://java.sun.com/javase/ja/6/docs/ja/technote …
    • good
    • 0
この回答へのお礼

まさに求めていた情報です。
これで疑問は解決しました。
あとは参考URLのところで勉強します。
お時間を割いて下さり大変感謝いたします。
どうもありがとうございました。

お礼日時:2007/11/16 18:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!