• ベストアンサー

キーボードから入力された全角文字列(変換中、確定後)の取得方法

JTextFieldの機能を自作しようとしています。 入力された半角文字は、getKeyChar()で取得できたのですが、このままgetKeyChar()を使うと、一文字の全角文字なら取得できますが、確定後の全角文字列は最後の1文字しか取得できません。 そこでいろいろ調べていると、変換中や確定後の文字列を取得するには、InputMethod関連を使うと良いようなのですが、実装の仕方がよく分かりません。 どのように記述すれば文字列を取得できるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

以下は簡単すぎて実用性ゼロですが、だいたいこんな感じです(これはパッシブクライアントの例)。 詳しくは、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/technotes/guides/imf/index.html
pan1nar0
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

> 入力された半角文字は どこへ、何に、入力しているのか、とか、やろうとしていることの全貌がわからん。スモール サンプル コード、プリーズ!

pan1nar0
質問者

お礼

申し訳ありません。 実現したいことは、キーボードから日本語の入力を取得することです。 要点だけ抜き出したソースです。 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:確定する(結果「単語」という文字列になる) という動作があったとします。 ここで、その結果(単語)を取得したいです。

すると、全ての回答が全文表示されます。

関連するQ&A