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次関数以外でもいろいろ描けるので 試してみてください。 • 描きたい範囲も入力できるようにもできる ようにしてみると便利なので改造して みてください
© Copyright 2025 ExpyDoc