JAVA GUIプログラミング 第5回 ボタンとそのイベント処理 今日は・・ ボタンを用いて操作をする方法を学びます。 以前に行った、人が回転するプログラムを改造します ただし、今回は旧式のプログラムで組んであるので 若干の違いはあります。 サンプルです(長いよ) import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; サンプルです(長いよ) public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); サンプルです(長いよ) public void init() { x=100;y=100;flag=0; delta_x=5; delta_y=0; image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); サンプルです(まだまだ) add(panel); panel.add(button1); panel.add(button2); panel.add(button3); panel.add(button4); anime=new Thread(this); anime.start(); } サンプルです(長いよ) public void paint(Graphics g) { g.setColor(Color.white); g.fillRect(0,0,500,500); if ((flag % 4)==0) g.drawImage(image1,x,y,this); if ((flag % 4)==1) g.drawImage(image2,x,y,this); if ((flag % 4)==2) g.drawImage(image3,x,y,this); if ((flag % 4)==3) g.drawImage(image4,x,y,this); } サンプルです(長いよ) public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { delta_x=0; delta_y=-5; } if(e.getSource()==button2) { delta_x=0; delta_y=5; } if(e.getSource()==button3) { delta_x=-5; delta_y=0; } if(e.getSource()==button4) { delta_x=5; delta_y=0; } } サンプルです(終わり) public void run() { while (anime!=null) { x+=delta_x; flag+=1; y+=delta_y; repaint(); if (x>500) {x=0;} try { Thread.sleep(100); } catch (InterruptedException e) {}; } } } 実行結果はどうでしたか? ボタンを押すことにより、移動方向が変わりましたね では、早速ですが解説します。 解説import部 import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; 解説import部 import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; 今回はjavax.swingではなく、 このようにします。 解説import部 import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; この3つもimportします 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; 今回はJappletではなく Appletにします。 Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; スレッドを用いるのでRunnableを、 int delta_x,delta_y; ボタンのイベントを扱うので ActionListenerimplementsします。 Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; 変数x、y、flagを用意します int delta_x,delta_y; Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; X方向の変化量と int delta_x,delta_y; Y方向の変化量を Thread anime=null; 表す変数を用意します Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; Thread anime=null; 以前と同じっス Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); button1を上という ボタンにします 解説 宣言部 public class ex10 extends Applet implements Runnable,ActionListener { int x,y,flag; int delta_x,delta_y; Thread anime=null; Image image1,image2,image3,image4; Button button1=new Button("上"); Button button2=new Button("下"); Button button3=new Button("左"); Button button4=new Button("右"); Panel panel=new Panel(); パネルを用意します 解説 init部 public void init() { x=100;y=100;flag=0; delta_x=5; delta_y=0; image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); 解説 init部 public void init() { x=100;y=100;flag=0; xとyとflagの値を設定します delta_x=5; delta_y=0; image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); 解説 init部 public void init() { x=100;y=100;flag=0; Xの移動量 delta_x=5; delta_y=0; Yの移動量を設定します image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); 解説 init部 public void init() { x=100;y=100;flag=0; delta_x=5; delta_y=0; image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); 画像の読み込みですね 解説 init部 public void init() { x=100;y=100;flag=0; delta_x=5; delta_y=0; image1=getImage(getCodeBase(),"s1.jpg"); image2=getImage(getCodeBase(),"s2.jpg"); image3=getImage(getCodeBase(),"s3.jpg"); image4=getImage(getCodeBase(),"s4.jpg"); button1.addActionListener(this); button2.addActionListener(this); button1からbuttton4までを button3.addActionListener(this); 処理するイベントとして追加する button4.addActionListener(this); 解説 init部 add(panel); Panelを画面に追加します panel.add(button1); panel.add(button2); panel.add(button3); panel.add(button4); anime=new Thread(this); anime.start(); } 解説 init部 add(panel); panel.add(button1); panel.add(button2); panel.add(button3); panel.add(button4); anime=new Thread(this); anime.start(); } パネルにボタン4つを追加します 解説 init部 add(panel); panel.add(button1); panel.add(button2); panel.add(button3); panel.add(button4); anime=new Thread(this); anime.start(); } スレッドを開始します 解説 paint部 public void paint(Graphics g) { g.setColor(Color.white); この前とまったく同じなので …(≧▽≦) g.fillRect(0,0,500,500); if ((flag % 4)==0) g.drawImage(image1,x,y,this); if ((flag % 4)==1) g.drawImage(image2,x,y,this); if ((flag % 4)==2) g.drawImage(image3,x,y,this); if ((flag % 4)==3) g.drawImage(image4,x,y,this); } 解説 run部 public void run() { while (anime!=null) { x+=delta_x; y+=delta_y; flag+=1; repaint(); if (x>500) {x=0;} try { Thread.sleep(100); } catch (InterruptedException e) {}; } 解説 run部 public void run() { while (anime!=null) { x+=delta_x; 今回はxとyをそれぞれdelta_x, y+=delta_y; delta_yだけ増やしてあげます flag+=1; repaint(); if (x>500) {x=0;} try { Thread.sleep(100); } catch (InterruptedException e) {}; } 解説 イベント処理部 public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { delta_x=0; delta_y=-5; } 以下略 解説 イベント処理部 public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { delta_x=0; delta_y=-5; } 以下略 } この部分はActionListener に登録したものに触れたとき に自動的に呼び出される 解説 イベント処理部 public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { delta_x=0; delta_y=-5; } 以下略 もしふれたものがbutton1 であればという意味です 解説 イベント処理部 public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { Button1は上に移動することなので、 delta_x=0; delta_y=-5; Xの移動量を0に、Yの移動量をー5にする } 以下略 今日はここまで 今日はボタンを利用する方法を勉強しました ボタンを配置する場所を設定するのは今日はや りません(JAVAでは結構面倒・・)
© Copyright 2024 ExpyDoc