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.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部 import java.applet.*; import java.awt.*; import java.awt.event.*; 今回もこの3つを使います
解説 宣言部 public class ex11 extends Applet implements 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 { 解説 宣言部 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 { 解説 宣言部 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 { 解説 宣言部 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(); Laといラベルを作ります ラベルにはaの値と 書かれています。
解説 宣言部 public class ex11 extends Applet implements 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(); Aの値を入力する Value_aという TextFieldを作ります ちなみに“1.0”は初めに 入っている値のことで 3というのは3文字分の大きさ を意味しています。
解説 宣言部 public class ex11 extends Applet implements 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 { 解説 宣言部 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; 解説 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部 初期値として A=1 B=0 C=0 にしておきます public void init() { 解説 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); } 初期値として A=1 B=0 C=0 にしておきます
解説 init部 ボタン1を処理するイベントに加えて パネルを追加しています public void init() { 解説 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部 パネルに La Value_a などを加えていきます public void init() { 解説 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); } パネルに La Value_a などを加えていきます
解説 paint部 { int i; double x,y,x1,y1,x2,y2; g.setColor(Color.white); 解説 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部 { int i; double x,y,x1,y1,x2,y2; g.setColor(Color.white); 解説 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部 { int i; double x,y,x1,y1,x2,y2; g.setColor(Color.white); 解説 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部 { int i; double x,y,x1,y1,x2,y2; g.setColor(Color.white); 解説 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); } 色を黒に設定して このfor文では、マスを描いてます (駄洒落ではありません)
解説 paint部 g.setColor(Color.red); g.drawLine(0,250,500,250); 解説 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); 解説 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); 解説 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) { 解説 イベント処理部 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) { 解説 イベント処理部 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(); } 発生したイベントが ボタン1であったら という意味ですね
解説 イベント処理部 public void actionPerformed(ActionEvent e) { 解説 イベント処理部 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(); } 難しいところですね 要は、value_aに入っている値を Aに代入する部分です 何故ややこしいかというと、 入力フォームはstring(文字型)なので Double型に変換しなければならないのです
解説 イベント処理部 public void actionPerformed(ActionEvent e) { 解説 イベント処理部 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) { 解説 イベント処理部 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次関数以外でもいろいろ描けるので 試してみてください。 描きたい範囲も入力できるようにもできる 試してみてください。 描きたい範囲も入力できるようにもできる ようにしてみると便利なので改造して みてください