import java.awt.*;
import java.awt.event.*;
public class Yuki extends Frame implements ActionListener,MouseListener{
String message="";
Button button1, button2, button3;
Checkbox check1, check2;
TextField textField;
int mx=200, my=200 ,state1=1, state2=1;
public Yuki(String title){
super(title);
addMouseListener(this);
setLayout(new FlowLayout());
add(button1=new Button("Nose"));
button1.addActionListener(this);
add(button2=new Button("Eyes"));
button2.addActionListener(this);
add(textField=new TextField(10));
textField.addActionListener(this);
add(button3=new Button("Quit"));
button3.addActionListener(this);
setSize(500,500);
setVisible(true);
addMouseListener(this);
}
public static void main(String args[]){
Yuki window=new Yuki("Yukidaruma");
}
public void mousePressed(MouseEvent e){
mx=e.getX();
my=e.getY();
message="";
repaint();
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void actionPerformed(ActionEvent e){
System.out.println(e);
Object source=e.getSource();
if(source instanceof Button){
String label=e.getActionCommand();
if(label.equals("Quit")){
System.exit(0);
}
else if(label.equals("Nose")){
state1=state1*(-1);
message="";
}
else{
state2=state2*(-1);
message="";
}
}
else if(source instanceof TextField){
message="TextField"+(TextField)source; //ここをどうすればよいかわかりません
}
repaint();
}
public void paint(Graphics g){
g.setColor(Color.gray);
g.fillRect(0,60,500,500);
g.setColor(Color.black);
g.fillRect(0,60,500,150);
g.setColor(Color.yellow);
g.fillOval(330,70,50,50);
g.setColor(Color.black);
g.fillOval(330,70,25,25);
g.setColor(Color.white);
g.fillOval(mx,my,100,100);
g.fillOval(mx-20,my+60,130,130);
g.setColor(Color.black);
if(state2==1){
g.fillOval(mx+50,my+30,8,16);
g.fillOval(mx+70,my+30,8,16);
}
else{
g.drawLine(mx+50,my+38,mx+58,my+38);
g.drawLine(mx+70,my+38,mx+78,my+38);
}
if(state1==1){
g.setColor(Color.orange);
int[] xs={mx+60,mx+60,mx+100};
int[] ys={my+55,my+66,my+60};
g.fillPolygon(xs,ys,3);
}
else{
g.setColor(Color.orange);
int[] xs={mx+60,mx+60,mx+80};
int[] ys={my+55,my+66,my+60};
g.fillPolygon(xs,ys,3);
}
if(message!=""){
g.setColor(Color.white);
g.fillOval(mx+150,my+20,200,100);
int[] xt={mx+170,mx+170,mx+120};
int[] yt={my+55,my+66,my+60};
g.fillPolygon(xt,yt,3);
g.setColor(Color.black);
g.drawString(message,mx+180,my+66);
}
}
}
TextFieldから文字列を取り出すメソッドを, TextFieldクラス の説明から探せばよいのですが,「メソッドの概要」の中にはそれらしいものはたしかに見つかりません.ただ, TextFieldは親クラスの TextComponent からいろいろなメソッドを継承していて,その中のgetTextを使うと入力したテキストを得ることができます.
TextField textField=(TextField)source;
message=textField.getText();
とするか,あるいは
message=((TextField)source).getText();
とすれば良いでしょう.
Button button=new Button(); add(button); button.addActionListener(this);など指定しているところでは、
button.addKeyListener(this);も加えるようにする。これは、Buttonがキーボードショートカットに対応するために、キー入力を横取りしてしまうのを取り返すためである。