JAVA GUIプログラミング

JAVA GUIプログラミング
第6回
TextFieldとLabel
今日は・・
• 文字や数値を入力し、プログラムに反映
させます
• そのための入力フォームである
TextFieldの使い方を勉強します。
いつも通り・・大変です
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
いつも通り・・大変です
public void init()
{
a=1.0;b=0;c=0;
button1.addActionListener(this);
add(panel);
panel.add(la);
panel.add(value_a);
panel.add(lb);
panel.add(value_b);
panel.add(lc);
panel.add(value_c);
panel.add(button1);
}
いつも通り・・大変です
public void paint(Graphics g)
{
int i;
double x,y,x1,y1,x2,y2;
g.setColor(Color.white);
g.fillRect(0,0,500,500);
g.setColor(Color.black);
for (i=0;i<500;i+=10)
{
g.drawLine(i,0,i,500);
g.drawLine(0,i,500,i);
}
いつも通り・・大変です
g.setColor(Color.red);
g.drawLine(0,250,500,250);
g.drawLine(250,0,250,500);
g.setColor(Color.black);
for (x=-2;x<=2;x+=0.001)
{
x1=250+125*x;
y=a*x*x+b*x+c;
y1=250-125*y;
g.drawLine((int)x1,(int)y1,(int)x1,(int)y1);
}
}
いつも通り・・大変です
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
}
どうでしょうか
• 係数a,b,cによって2次関数を描けましたか
• 入力欄とボタンがキチント機能しましたか
解説 import部
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
今回もこの3つを使います
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
今回も
extends Appletとし
イベント処理するので
ActionListener
を使います
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
係数用の実数変数を
用意します
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Laといラベルを作ります
Label la=new Label("aの値");
ラベルにはaの値と
TextField value_a=new TextField("1.0",3);
書かれています。
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
Aの値を入力する
TextField value_a=new TextField("1.0",3);
Value_aという
Label lb=new Label("bの値");
TextFieldを作ります
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
ちなみに“1.0”は初めに
入っている値のことで
TextField value_c=new TextField("0.0",3);3というのは3文字分の大きさ
Button button1=new Button("描く");
Panel panel=new Panel();
を意味しています。
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
先ほどと
Label lc=new Label("cの値");
おんなじです
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
Panel panel=new Panel();
解説 宣言部
public class ex11 extends Applet implements ActionListener
{
double a,b,c;
Label la=new Label("aの値");
TextField value_a=new TextField("1.0",3);
Label lb=new Label("bの値");
TextField value_b=new TextField("0.0",3);
Label lc=new Label("cの値");
TextField value_c=new TextField("0.0",3);
Button button1=new Button("描く");
「描く」というボタンを作り、
Panel panel=new Panel();
次にパネルを用意します
解説 init部
public void init()
{
a=1.0;b=0;c=0;
button1.addActionListener(this);
add(panel);
panel.add(la);
panel.add(value_a);
panel.add(lb);
panel.add(value_b);
panel.add(lc);
panel.add(value_c);
panel.add(button1);
}
解説 init部
public void init()
{
初期値として
a=1.0;b=0;c=0;
A=1
button1.addActionListener(this);
B=0
add(panel);
C=0
panel.add(la);
panel.add(value_a);
panel.add(lb);
panel.add(value_b);
panel.add(lc);
panel.add(value_c);
panel.add(button1);
}
にしておきます
解説 init部
public void init()
{
a=1.0;b=0;c=0;
button1.addActionListener(this);
add(panel);
panel.add(la);
panel.add(value_a);
panel.add(lb);
panel.add(value_b);
panel.add(lc);
panel.add(value_c);
panel.add(button1);
}
ボタン1を処理するイベントに加えて
パネルを追加しています
解説 init部
public void init()
{
a=1.0;b=0;c=0;
button1.addActionListener(this);
add(panel);
panel.add(la);
panel.add(value_a);
パネルに
panel.add(lb);
La
panel.add(value_b);
Value_a
panel.add(lc);
などを加えていきます
panel.add(value_c);
panel.add(button1);
}
解説 paint部
public void paint(Graphics g)
{
int i;
double x,y,x1,y1,x2,y2;
g.setColor(Color.white);
g.fillRect(0,0,500,500);
g.setColor(Color.black);
for (i=0;i<500;i+=10)
{
g.drawLine(i,0,i,500);
g.drawLine(0,i,500,i);
}
解説 paint部
public void paint(Graphics g)
{
int i;
double x,y,x1,y1,x2,y2;
g.setColor(Color.white);
g.fillRect(0,0,500,500);
g.setColor(Color.black);
for (i=0;i<500;i+=10)
{
g.drawLine(i,0,i,500);
g.drawLine(0,i,500,i);
}
変数を用意しておきます
解説 paint部
public void paint(Graphics g)
{
int i;
double x,y,x1,y1,x2,y2;
g.setColor(Color.white);
g.fillRect(0,0,500,500);
g.setColor(Color.black);
for (i=0;i<500;i+=10)
{
g.drawLine(i,0,i,500);
g.drawLine(0,i,500,i);
}
画面を真っ白にする
解説 paint部
public void paint(Graphics g)
{
int i;
double x,y,x1,y1,x2,y2;
g.setColor(Color.white);
g.fillRect(0,0,500,500);
g.setColor(Color.black);
for (i=0;i<500;i+=10)
色を黒に設定して
{
このfor文では、マスを描いてます
g.drawLine(i,0,i,500);
(駄洒落ではありません)
g.drawLine(0,i,500,i);
}
解説 paint部
g.setColor(Color.red);
g.drawLine(0,250,500,250);
g.drawLine(250,0,250,500);
g.setColor(Color.black);
for (x=-2;x<=2;x+=0.001)
{
x1=250+125*x;
y=a*x*x+b*x+c;
y1=250-125*y;
g.drawLine((int)x1,(int)y1,(int)x1,(int)y1);
}
}
解説 paint部
g.setColor(Color.red);
g.drawLine(0,250,500,250);
g.drawLine(250,0,250,500);
色を赤にして、
軸を赤で描いてます
g.setColor(Color.black);
for (x=-2;x<=2;x+=0.001)
{
x1=250+125*x;
y=a*x*x+b*x+c;
y1=250-125*y;
g.drawLine((int)x1,(int)y1,(int)x1,(int)y1);
}
}
解説 paint部
g.setColor(Color.red);
g.drawLine(0,250,500,250);
g.drawLine(250,0,250,500);
g.setColor(Color.black);
for (x=-2;x<=2;x+=0.001)
色を黒にして
{
グラフを描きます
x1=250+125*x;
y=a*x*x+b*x+c;
y1=250-125*y;
g.drawLine((int)x1,(int)y1,(int)x1,(int)y1);
}
}
解説 イベント処理部
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
解説 イベント処理部
public void actionPerformed(ActionEvent e)
{
発生したイベントが
if(e.getSource()==button1)
ボタン1であったら
{
という意味ですね
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
解説 イベント処理部
public void actionPerformed(ActionEvent e)
難しいところですね
{
if(e.getSource()==button1)
{
要は、value_aに入っている値
を
Aに代入する部分です
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
何故ややこしいかというと、
入力フォームはstring(文字型)なので
Double型に変換しなければならないのです
解説 イベント処理部
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
この部分でa,b,cに
新しい値が入りました
解説 イベント処理部
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1)
{
a=Double.valueOf(value_a.getText()).doubleValue();
b=Double.valueOf(value_b.getText()).doubleValue();
c=Double.valueOf(value_c.getText()).doubleValue();
repaint();
}
}
そこで、再画面を描きます
今日はここでおしまいです
• 2次関数以外でもいろいろ描けるので
試してみてください。
• 描きたい範囲も入力できるようにもできる
ようにしてみると便利なので改造して
みてください