12/14 アプレットプログラミング


質問と回答

Q.
TextFieldから文字をとりだしたいのですが、やり方がわかりません。 どうすればよいのでしょうか。ちなみにプログラムは次のように書きました。 何かあればご指摘ください。
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);
	} 
    }
}
A.
なるほど,雪だるまに入力したテキストをしゃべらせるという趣向ですね.面白いと思います.

TextFieldから文字列を取り出すメソッドを, TextFieldクラス の説明から探せばよいのですが,「メソッドの概要」の中にはそれらしいものはたしかに見つかりません.ただ, TextFieldは親クラスの TextComponent からいろいろなメソッドを継承していて,その中のgetTextを使うと入力したテキストを得ることができます.

    TextField textField=(TextField)source;
    message=textField.getText(); 
とするか,あるいは
    message=((TextField)source).getText(); 
とすれば良いでしょう.
Q.
先生のプログラムを参考にして、javaを作ったのですが、肝心の雪だるまが動きません。どうしたらいいでしょう? ちなみにこんなプログラムです。Yukidaruma4.java }
A.
プログラムの貼付けに失敗したようですね.もう一度投稿してみてください.

過去の課題について


今日の内容


最終課題について


今日の課題