Java Appletの解説
<12.テキストフィールドの使い方(その2)>
テキストフィールドを利用する際の小技を説明したいと思います。
1.カーソルを自動的に移動させる方法
テキストフィールドに入力するには、マウスを使ってカーソルを移動する必要があります。それを自動的にする方法です。
テキストフィールドはanonymous内部クラスの方法、ボタンは独立したリスナークラスでの方法で作ってます。
1.<Javaファイル>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public class tetext2 extends Applet{
String val1,val2,val3,cl="";
略
public void init(){
略
add(tf3=new TextField("",10));
add(bt=new Button("CL"));
tf1.requestFocus();
bt.addActionListener(new MyListener());
tf1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
TextField t=(TextField)e.getSource();
val1=t.getText();
tf1.transferFocus();}
});
tf2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
TextField t=(TextField)e.getSource();
val2=t.getText();
s1=Integer.parseInt(val1);
s2=Integer.parseInt(val2);
s=s1+s2;
val3=Integer.toString(s);
tf3.setText(val3);
}});}
class MyListener implements ActionListener{
public void actionPerformed(ActionEvent e){
tf1.setText(cl);
tf2.setText(cl);
tf3.setText(cl);val1="0";val2="0";
tf1.requestFocus();
}}}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
例1.ここをクリックして下さい。
2.<解説>
1)tf1.requestFocus();
初期条件として、テキストフィールドtf1に入力フォーカス合わせる。
すなわち、初期状態としてtf1にカーソルがあることになります。
2)tf1.addActionListener(new ActionListener(){略
tf1.transferFocus();}
テキストフィールドtf1に入力されリターンキーが押されたらtf1の次
のテキストフィールドにフォーカスが移動する。すなわち、カーソルがtf2に移動します。
3)tf2.addActionListener(new ActionListener(){略
tf3.setText(val3);
テキストフィールドtf2に入力されたらtf1とtf2を加算してtf3に表示する。
4)class MyListener implements ActionListener{
public void actionPerformed(ActionEvent e){略
tf1.requestFocus();
CLボタンが押されたらテキストフィールドtf1からtf3までクリアーして、
そしてtf1にフォーカスを合わせる。クリアーしてカーソルがtf1に移動します。
2.テキストフィールド入力を数字のみ受け付ける
テキストフィールドに数字以外の文字が入力されても受け付けないようにするための方法です。
1.<Javaファイル>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
public class tetext4 extends Applet{
略
double ds,ds1,ds2;
public void init(){
略
tf1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
TextField t=(TextField)e.getSource();
val1=t.getText();
ds1=Double.valueOf(val1).doubleValue();
if (Double.isNaN(ds1)) {ds1=0.0;}
else {tf1.transferFocus();}
}});
tf2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
TextField t=(TextField)e.getSource();
val2=t.getText();
ds2=Double.valueOf(val2).doubleValue();
if (Double.isNaN(ds2)) {ds2=0.0;}
else {ds=ds1+ds2;val3=Double.toString(ds);tf3.setText(val3);}
}}); }
以下省略
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
例2.ここをクリックして下さい。
2.<解説>
1)double ds,ds1,ds2;
例1と違って、数字の処理をintでなくdoubleで行います。
2)ds1=Double.valueOf(val1).doubleValue();
テキストフィールドに入力された文字(val1)をdoubleの数字に変換してds1に代入します。
3)if (Double.isNaN(ds1)) {ds1=0.0;}
else {tf1.transferFocus();}
Double.isNaN(ds1))は、ds1が数字でなければtrueを返します。すなわちds1=0.0;を実行します。
ds1がdoubleの数字であれば、tf1.transferFocus();を実行します。
文字が入力された場合、カーソルは移動せず、数字も0が入力された形になります。
4)if (Double.isNaN(ds2)) {ds2=0.0;}
else {ds=ds1+ds2;val3=Double.toString(ds);tf3.setText(val3);}
同じくテキストフィールドのds2が文字であればds2=0.0;を実行。数字であればelse以下を実行します。
3.パスワード入力形式
入力した文字が表示されず、エコー文字が表示されるいわゆるパスワード入力形式。
1.<Javaファイル>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class tetext5 extends Applet{
String val1;
TextField tf1;
Graphics g;
public void init(){
setBackground(Color.yellow);
add(tf1=new TextField("",6));
tf1.setEchoChar('*');
tf1.requestFocus();
tf1.addActionListener(new MyListener()); }
class MyListener implements ActionListener{
public void actionPerformed(ActionEvent e){
TextField t=(TextField)e.getSource();
val1=t.getText();
repaint();}}
public void paint(Graphics g){
g.setFont(new Font("TimesRoman",Font.BOLD,20));
if (val1.equals("test")){g.drawString("パスワードがあってます。",100,100);}
else {g.drawString("パスワードが間違ってます。",100,130);}
}}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
例3.ここをクリックして下さい。
2.<解説>
1)tf1.setEchoChar('*');
テキストフィールドtf1のエコー文字を*にする。
2)if (val1.equals("test")){g.drawString("パスワードがあってます。",100,100);}
else {g.drawString("パスワードが間違ってます。",100,130);}}}
テキストフィールドtf1に入力されたval1の文字列がtestと同じ文字であれば
g.drawString("パスワードがあってます。",100,100);を実行。
違えばg.drawString("パスワードが間違ってます。",100,130);を実行する。
なお、文字列の比較の時はequalsを用います。
娯楽室の各部屋