import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class gamen1 {
// 共通領域
public HashMap map = null;
// 画面項目項目
Frame f;
Button b1;
Button b2;
TextArea t1;
int seikai = 0;
int phaseNo = 0;
int curno = 0;
/*
* 表示
*/
public void initAppData()
{
// フレームを作成する
f = new Frame("test");
f.setSize(240,320);
f.setLayout(null);
// アクションを作成する
gamen1_HandleEvent al = new gamen1_HandleEvent();
// ラベル
Label l1 = new Label("早うちの練習");
l1.setLocation(10,30);
l1.setSize(100,30);
f.add(l1);
Label l2 = new Label("これは、練習文です。");
l2.setLocation(10,120);
l2.setSize(150,30);
f.add(l2);
Label l3 = new Label("以下の文を打とう!");
l3.setLocation(10,70);
l3.setSize(100,30);
f.add(l3);
// テキスト
t1 = new TextArea();
t1.setLocation(10,160);
t1.setSize(150,80);
t1.addKeyListener(al);
f.add(t1);
// ボタン作成
b1 = new Button("挑戦する");
b1.setLocation(120,70);
b1.setSize(100,30);
b1.addActionListener(al);
b1.addKeyListener(al);
f.add(b1);
// ボタン作成
b2 = new Button("打ち終わった!");
b2.setLocation(10,250);
b2.setSize(100,30);
b2.addActionListener(al);
b2.addKeyListener(al);
f.add(b2);
// 表示
f.setVisible(true);
DispAppData();
}
/*
* 再描画
*/
public void DispAppData()
{
// 画面間引数を受け取る
String rensyu = "";
if ( map != null )
{
rensyu = (String)map.get("rensyu");
if (rensyu == null )
rensyu = "";
}
// 画面表示
if ( t1 != null )
{
t1.setText(rensyu);
if ( curno == 1 )
{
t1.requestFocus();
}
}
if ( b1 != null )
{
if ( curno == 0 )
{
b1.requestFocus();
}
}
if ( b2 != null )
{
if ( curno == 2 )
{
b2.requestFocus();
}
}
}
/*
* 終了
*/
public void freeAppData()
{
// 2度目にもとってきたときのため、初期化
map.remove("rensyu");
phaseNo = 0;
curno = 0;
// f.dispose(); // 消さないことにする
}
/*
* カーソル移動
*/
public int NextCurItem(int curno,int flg,int phaseNo)
{
switch(flg)
{
case KeyEvent.VK_DOWN:
switch(phaseNo)
{
case 0: //最初のとき
return 0; //どこにいても0
case 1: //入力したとき
switch(curno)
{
case 1: //入力のとき
return 2; //打ち終わったへ
default : //それ以外は
return 1; //入力エリアへ
}
}
break;
case KeyEvent.VK_UP:
switch(phaseNo)
{
case 0: //最初のとき
return 0; //どこにいても0
case 1: //入力したとき
switch(curno)
{
case 1: //入力のとき
return 2; //打ち終わったへ
default : //それ以外も
return 1; //入力エリアへ
}
}
}
return 0; //該当なし
}
/*
* イベントリスナー
*/
private class gamen1_HandleEvent
implements ActionListener,KeyListener
{
/*
* キー処理
*/
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
int dirty_flg = 0;
// 入力値を取ってきておく
map.put("rensyu",t1.getText());
// 次の処理
switch(e.getKeyCode())
{
case KeyEvent.VK_ENTER:
Object o = e.getSource();
if ( o.equals(b1)== true)
{ // 挑戦する
System.out.println("挑戦する");
phaseNo = 1;
curno = 1;
dirty_flg = 1;
break;
}
else if ( o.equals(b2)== true)
{ // 打ち終わった!
// 共通領域への値設定
map.put("username","ウィリアムのいたずら");
seikai ++;
map.put("sei_ritu",new Integer(seikai).toString());
map.put("byo","20");
// 第二画面表示
gamen2 g2 = (gamen2)map.get("gamen2");
if ( g2 == null )
{
g2 = new gamen2();
map.put("gamen2",g2);
g2.map = map;
g2.initAppData();
}
else
{
// 再描画
g2.DispAppData();
}
// 消す
freeAppData(); // 消さないで両方だす
}
break;
case KeyEvent.VK_UP:
System.out.println("UP");
curno = NextCurItem(curno,KeyEvent.VK_UP,phaseNo);
dirty_flg = 1;
break;
case KeyEvent.VK_DOWN:
System.out.println("Down");
curno = NextCurItem(curno,KeyEvent.VK_DOWN,phaseNo);
dirty_flg = 1;
break;
}
// 書き換え必要なら再描画
if ( dirty_flg != 0 )
{
DispAppData();
}
}
/*
* ボタンが押されたときの処理
*/
public void actionPerformed(ActionEvent e)
{
Object o = e.getSource();
if ( o.equals(b1)== true)
{ // 挑戦する
System.out.println("挑戦する");
phaseNo = 1;
curno = 1;
DispAppData();
return;
}
if ( o.equals(b2)== true)
{ // 打ち終わった!
// 共通領域への値設定
map.put("username","ウィリアムのいたずら");
seikai ++;
map.put("sei_ritu",new Integer(seikai).toString());
map.put("byo","20");
// 第二画面表示
gamen2 g2 = (gamen2)map.get("gamen2");
if ( g2 == null )
{
g2 = new gamen2();
map.put("gamen2",g2);
g2.map = map;
g2.initAppData();
}
else
{
// 再描画
g2.DispAppData();
}
// 消す
freeAppData(); //消さないで両方だす
}
}
}
}
|