,

Javaでのフォーカス移動

事務などで使うプログラムを開発していると、お客様からEnterキーを押したら次の入力に移って欲しいという仕様が…

事務などで使うプログラムを開発していると、お客様からEnterキーを押したら次の入力に移って欲しいという仕様が提示されます。昔のシステムはコマンドライン環境で作られていたのでEnterキーを入力すると次の入力に移ることが多かったです。

WindowsなどのGUI環境ではTabで移動が基本なのですが、オペレータが使いやすい方に考えるとEnterキーかなと思います。

前置きはこれくらいにして、VB6.0は各コントロールのsetForcus()メソッドかtabキーをsendKey()します。
.net Frameworkの場合はフォームのSelectNextControl()であっさりと移動します。
引数を忘れずに。

ではJavaは?

テキストフィールドにイベントリスナを追加します。
まずはじめにEnterキーを取るところから説明します。

JTextFieldのaddKeyListenerメソッドでリスナーを追加します。

次にイベントリスナを作成します。長いので一部を抜粋

import java.awt.event.*;
public class KeyCheck implements KeyListener{
public void keyPressed( KeyEvent e){}
public void keyTyped( KeyEvent e){}
public void keyReleased( KeyEvent e){}
}

この時、keyPressed,keyTyped,keyReleasedメソッドはお約束です。
イベントの発生順はリファレンスが詳しいです。
https://docs.oracle.com/javase/jp/1.4/api/java/awt/event/KeyListener.html

Enterキーが押されたときなのでkeyPressedのKeyEventを判定します。

if ( e.getKeyCode() == KeyEvent.VK_ENTER ){

}

こんな感じです。
さらにポイントなのがKeyEventからイベントを発生したクラスを取ることです。

e.getSource()

です。これをキャストします。例えばJTextFieldなら

JTextField txt = (JTextField)e.getSource();

別のクラスにこのリスナを付けているとキャストエラーになるので注意してください。
その辺は作り込めば大丈夫ですが。

ようやく今回の主役「次のフォーカスを移動する」です。
↓これだけ

try{
  txt.transferFocus();
}catch(Exception ex){}

例外が飛んできますのでその辺も注意してください。

フォーカスの順番を意図的に決めていない場合は上から下に移ると思います。
画面設計が普通ならば、オペレータが迷うこともないと思います。

またね!

Tags:

コメントを残す