プログラムは、その機能の他に予想外の操作に対して適切な例外処理が必要でした。もう一つ大切なのは操作性がよいことです。
CatText2.javaで、マウスだけでなく[Enter]キーで操作できるように改良します。もともと[Tab]キーでフォーカスが移動しますからtext1に入力してから[Tab]でtext2に移動することは可能です。また、さらにボタンに移動してスペースキーでボタンを押すことができます。
でも、ActionListnerはテキストフィールドで[Enter]キーを認識しますからこれを使ってもう少し便利にしましょう。text1に入力すると次はtext2に入力するわけですから、text1で[Enter]を押すと「text2に移動」と動作させます。text2に入力したら次は合計ボタンですからtext2で[Enter]を押すと合計をとるようにします。
プログラム中の4カ所にあるCatText2をCatText3に変えます。
public class CatText3 extends JFrame{ など
text1とtext2をActionListnerに登録します。赤い部分が追加部分です。
button1.addActionListener(this);
text1.addActionListener(this);
text2.addActionListener(this);
actionPerformedに処理を加えます。赤と青の部分が追加部分です。
public void actionPerformed(ActionEvent e) { if (e.getSource() == text1) { text2.requestFocusInWindow(); } else if (e.getSource() == button1 || e.getSource() == text2) { double x = 0 ; double y = 0 ; ……
JTextFieldはJButtonと全く同じに使えます。JButtonのイベントがクリックで、JTextFieldのイベントが[Enter]キーの入力になっているだけです。
button1.addActionListener(this); //JButtonの場合 text1.addActionListener(this); //JTextFieldの場合
if (e.getSource() == button1) { //JButtonの場合 if (e.getSource() == text1) { //JTextFieldの場合
次の文中の || は、「または」の意味です。ボタンをクリックしても、[Enter]キーでも使えるようにしたかったので、このようにしました。
else if (e.getSource() == button1 || e.getSource() == text2) {
青の部分はtext2にフォーカス(focus)が移動するように要請(request)するというものです。
text2.requestFocusInWindow();