Java Drawing DrawTop

Language

JP  US  UK

 

リスナー設定パネル

 H. Jyounishi, Tokyo Japan
 

Frame (Index), No frame                 version:0.3(latest)  

Summary:
LisnerPanelはDrawPanelの拡張クラスで、全てのマウスリスナー、マウスモーションリスナーをこのパネルに設定する。また日本語かな漢字変換をサポートするためInput Method Frameworkを利用する。このためInputMethodListener, InputMethodRequestsインターフェイスが定めるメソッドをインプリメントする。
このページで説明するクラス: ListenerPanel

1. 概要
∙ LisnerPanelはDrawPanelの拡張クラスで、全てのマウスリスナー、マウスモーションリスナーをこのパネルに設定する。

CreateShapeLS, MoveResizeShapeLS, SelectionLS, MousePositionLS, ModifyShapeLS, TextBoxなど


∙ 特に重要な役割を果たすのがテキスト入力でInput Method Frameworkを使う。
 このためInputMethodListener, InputMethodRequestsインターフェイスが定めるメソッドをインプリメントする。

Input Method FrameworkのActiveClientを使うと、日本語の場合、かな漢字変換の結果を受け取れる。
英字の場合は、KeyListenerインターフェイスのkeyTypedメソッドで直接入力文字を受け取るが、 日本語の場合はInputMethodListenerのinputMethodTextChangedメソッドで 日本語かな漢字変換された文字列を受け取ることができる。
KeyListener, InputMethodListener, InputMethodRequestsインターフェイスには幾つかのメソッドが定義されている。
但し、このアプリケーションで使うのは次の4つのメソッドである(他のメソッドは複数行に分割された文字列に対してどう使うのか分からない)。


Method Description
keyTyped
入力した英文字を取得する。
keyPressed
上下左右の矢印キー(Home, End, Up, Down)でキャレット(文字カーソル)を移動するために使う。
inputMethodTextChanged
日本語かな漢字変換の結果を受け取る。文字列を入力しEnterを押すとテキストが確定し、inputMethodTextChangedの引数:Eventから確定テキストを取り出せる。これを編集中のドキュメントに挿入する。Enterを押す前は未確定テキストをEventから取り出せる。この未確定テキストは画面に表示する。
getTextLocation
現在のテキスト入力位置を返す。このメソッドをインプリメントしないと、日本語かな漢字変換の候補となる文字を表示するウインドウを表示する際にエラーがでる。


2. ListenerPanelクラス 戻る=>page top
public class ListenerPanel extends DrawPanel implements KeyListener, InputMethodListener, InputMethodRequests

<メソッド 説明
コンストラクタ
public ListenerPanel()
ActiveClientとして動作させるために次の設定を行う。
this.requestFocus();
this.enableInputMethods(true);
this.addInputMethodListener(this);
this.addKeyListener(this);
this.addMouseListener(this);
getMouseListenersInfo
public String getMouseListenersInfo()
DialogOfDrawPanel, DialogOfShapeFormatから呼ばれる。ダイアログにMouseListenerの情報を表示するために使う。
printMouseListeners
public void printMouseListeners()
デバッグ用に使う。
isMouseListener
public boolean isMouseListener(MouseListener listener)
引数で指定されたMouseListenerが、このListenerPanelに設定されているときtrueを返す。
isMouseMotionListener
public boolean isMouseMotionListener(MouseMotionListener listener)
引数で指定されたMouseMotionListenerが、このListenerPanelに設定されているときtrueを返す。
keyTyped
public void keyTyped(KeyEvent event) :KeyListenerのメソッド
KeyEventで受け取った値に対して次の処理を行う。
∙ ASCII制御文字(0x00-0x20)は\n(0x0a, line feed)以外受け付けない。
これはアクセラレータ(ctrl+x:cut, ctrl+C:copy, ctrl+V;paste)を入力したときに、KeyTypedで受けつけテキストに挿入すると、不明な表示できない文字として入り込むためである。
See=>KeyEventで受け取る値アクセラレータ設定の問題点(キー入力、アクション処理の問題点)
∙ ContainerManagerにテキスト入力可能(activeted)なTextboxがあるか否か問い合わせる。
 あればそのTextBoxのkeyTypedメソッドに渡す。
keyPressed
public void keyPressed(KeyEvent event) :KeyListenerのメソッド
KeyEvent.getKeyCodeでキーコードを取得。これがHome, End, Up, Downキーコードのどれかに一致すれば、テキスト入力可能(activeted)なTextboxのkeyPressedメソッドへ渡す。
See=>KeyEventで受け取る値
keyReleased
public void keyReleased(KeyEvent event) :KeyListenerのメソッド
何もしない。
getInputMethodRequests
public InputMethodRequests getInputMethodRequests():InputMethodListenerのメソッド
このオブジェクトを返す。
inputMethodTextChanged
public void inputMethodTextChanged(InputMethodEvent event) :InputMethodListenerのメソッド
ContainerManagerにテキスト入力可能(activeted)なTextboxがあるか否か問い合わせる。あればそのTextBoxのinputMethodTextChangedメソッドを呼ぶ。
テキスト入力処理はTextBoxのinputMethodTextChangedメソッドで行い、このメソッドはスルーするだけである。
caretPositionChanged
public void caretPositionChanged(InputMethodEvent event) :InputMethodListenerのメソッド
何もしない。
getCommittedTextLength
public int getCommittedTextLength():InputMethodListenerのメソッド
何もしない。
getTextLocation
public Rectangle getTextLocation(TextHitInfo offset) :InputMethodRequestsのメソッド
テキスト入力可能(activeted)なTextBoxのgetTextLocationメソッドを呼んで、現在のテキスト位置を返す。
このメソッドはInput Method frameworkで、日本語かな漢字変換の候補を表示するダイアログの位置を決めるために使われている。このメソッドを実装しないと、エラーが出る。
getLocationOffset
public TextHitInfo getLocationOffset(int x, int y) :InputMethodRequestsのメソッド
何もしない。
getInsertPositionOffset
public int getInsertPositionOffset():InputMethodRequestsのメソッド
何もしない。
getCommittedText
public AttributedCharacterIterator getCommittedText(int beginIndex, int endIndex, Attribute[] attributes)

InputMethodRequestsのメソッド。何もしない。
cancelLatestCommitted
Text
public AttributedCharacterIterator cancelLatestCommittedText(Attribute[] attributes)
InputMethodRequestsのメソッド。何もしない。
getSelectedText
public AttributedCharacterIterator getSelectedText(Attribute[] attributes)
InputMethodRequestsのメソッド。何もしない。
mousePressed
public void mousePressed(MouseEvent e)
Input Method Frameworkで言うアクティブクライアントを有効にする。
this.requestFocus();
this.enableInputMethods(true);
mouseClicked
public void mouseClicked(MouseEvent e)
同上
this.requestFocus();
this.enableInputMethods(true);
mouseReleased
public void mouseReleased(MouseEvent e)
なにもしない。
mouseEntered
public void mouseEntered(MouseEvent e)
なにもしない。
mouseExited
public void mouseExited(MouseEvent e)
なにもしない。

: The values of java.awt.event.KeyEvent
(*1) keyChar: KeyEventのgetKeyCharメソッドで取得したキャラクターの印字
(*2) keyChar Hex: 上記キャラクターの16進形式印字
(*3) keyCode: KeyEventのgetKeyCodeメソッドで取得したコードの印字
"?": 標準出力(System.out.println)での表示、"-": keyTypedまたはkeyPressedメソッドが呼ばれない

キー
keyTyped
keyPressed
keyChar
(*1)
keyChar Hex
(*2)
keyCode
(*3)

keyChar
(*1)
keyChar Hex
(*2)
keyCode
(*3)

ctrl
-
-
-
?
0xffff
17(VK_CONTROL)
Back space
?
0x08
0
?
0x08
8(VK_BACK_SPACE)
Enter(改行)
?
0x0a
0
?
0x0a
10(VK_ENTER)
ctrl+C
?
0x03(ctrl+C)
0
?
0x03(ctrl+C)
67(VK_C)
ctrl+X
?
0x18(ctrl+X)
0
?
0x18(ctrl+X)
88(VK_X)
ctrl+X
?
0x16(ctrl+V)
0
?
0x16(ctrl+V)
86(VK_V)
Home (左向き矢印)
-
-
-
?
0xffff
37
End (右向き矢印)
- -
- ?
0xffff
39
pg Up (上向き矢印)
- -
- ?
0xffff
38
pg Dn (下向き矢印)
- -
- ?
0xffff
40


Copyright (c) 2009-2013
All other trademarks are property of their respective owners.