マルチメディアコンピューティングU

第5章:マウスを使う

5.1 クリックした位置の取得法

サンプル1:線を引く

import java.applet.*;
import java.awt.Graphics;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class mouseRei1 extends Applet implements MouseListener
{
        int x0=0, y0=0, x1=0, y1=0;

        public void init()
        {
                addMouseListener(this);
        }

        public void mousePressed(MouseEvent e)
        {
                x0=e.getX();
                y0=e.getY();
        }

        public void mouseReleased(MouseEvent e)
        {
                x1=e.getX();
                y1=e.getY();
                repaint();
        }

        public void mouseClicked(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}

        public void paint(Graphics g)
        {
                g.drawLine(x0,y0,x1,y1);
        }
}

サンプル2:mouseEntered

import java.applet.*;
import java.awt.Graphics;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Color;

public class mouse1 extends Applet implements MouseListener
{
        int flag = 0;

        public void init()
        {
                addMouseListener(this);
        }

        public void mousePressed(MouseEvent e){}
        public void mouseReleased(MouseEvent e) {}
        public void mouseClicked(MouseEvent e){}
        public void mouseEntered(MouseEvent e){
                flag = 1;               
                repaint();
        }
        public void mouseExited(MouseEvent e){
                flag = 0;
                repaint();
        }

        public void paint(Graphics g)
        {
                if(flag == 1) g.setColor(Color.red);
                else g.setColor(Color.green);
                g.fillRect(0,0,1000,1000);
        }
}

5.2 プッシュボタン

5.3 チェックボックス

サンプル3:チェックボックス

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class checkbox extends Applet implements ActionListener
{
        int ym=0, ki=0, hy=0;
        Checkbox Yasuko=new Checkbox("光浦靖子");
        Checkbox Kiriko=new Checkbox("磯野貴理子");
        Checkbox Hanako=new Checkbox("山田花子");
        Label Q = new Label("あなたの好きな女優は?");
        Button b=new Button("送信");

        public void init()
        {
                add(Q);
                add(Yasuko);
                add(Kiriko);
                add(Hanako);
                add(b);
                b.addActionListener(this);
        }

        public void actionPerformed(ActionEvent e){
                if( Yasuko.getState() ) ++ym;
                if( Kiriko.getState() ) ++ki;
                if( Hanako.getState() ) ++hy;
                repaint();
                Yasuko.setState(false);
                Kiriko.setState(false);
                Hanako.setState(false);
        }

        public void paint(Graphics g)
        {
                String s1=Integer.toString(ym);
                String s2=Integer.toString(ki);
                String s3=Integer.toString(hy);
                g.drawString("光浦靖子 "+s1, 10,100);
                g.drawString("磯野貴理子 "+s2, 10,125);
                g.drawString("山田花子 "+s3, 10,150);
        }
}

5.4 メニュー

サンプル4:ウィンドウ

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class window extends Applet implements ActionListener
{
        private Frame f;

        public void init()
        {
                setSize(200,200);
                Dimension d = getSize();
                f = new myFrame(this);
                f.setSize(d);
                f.show();
        }

        public void actionPerformed(ActionEvent e){}

        public void paint(Graphics g)
        {
                g.drawString("hello", 10, 10);
        }
}

class myFrame extends Frame implements ActionListener
{
        private Applet a;
        private MenuBar mb;
        public String m = new String();

        public myFrame(Applet ap)
        {
                super("NEW FRAME");
                a = ap;
                mb = new MenuBar();
                Menu m1 = new Menu("好きな女優");
                MenuItem mi11 = new MenuItem("光浦靖子");
                mi11.addActionListener(this);
                m1.add(mi11);
                MenuItem mi12 = new MenuItem("磯野貴理子");
                mi12.addActionListener(this);
                m1.add(mi12);
                MenuItem mi13 = new MenuItem("山田花子");
                mi13.addActionListener(this);
                m1.add(mi13);
                mb.add(m1);
                setMenuBar(mb);
        }

        public void actionPerformed(ActionEvent e) {
                MenuItem mit = (MenuItem)e.getSource();
                String s = mit.getLabel();
                if( s=="光浦靖子") {
                        m = "光浦靖子が好きです";
                }
                else if( s=="磯野貴理子") {
                        m = "磯野貴理子が好きです";
                }
                else if( s=="山田花子") {
                        m = "山田花子が好きです";
                }
                repaint();
        }

        public void paint(Graphics g) {
                g.drawString(m, 10, 100);
        }
}

付録1. スクロールバー

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Scroll extends Applet implements AdjustmentListener{
   Scrollbar scrH, scrV;     // スクロールバーの名前宣言
   int sliderH, sliderV;

   public void init(){
      scrH = new Scrollbar( Scrollbar.HORIZONTAL ); // スクロールバーの定義
      scrV = new Scrollbar( Scrollbar.VERTICAL, 30,10,0,60); //スクロールバーの定義
      //30は初期値,10はスライダの幅,0は最小値,60は最大値(実際には50=60-10)
      add( scrH ); add( scrV );         // スクロールバー取付
      scrH.setUnitIncrement( 2 );       // 方向ボタンの増分を変更
      scrH.setValues( 60, 10, 0, 110 ); // スクロールバーの変数を指定
      sliderH = 60; sliderV = 30;       // 初期値を代入
      scrH.addAdjustmentListener( this );      // イベントリスナーへの登録
      scrV.addAdjustmentListener( this );
      setBackground( Color.lightGray );
   }
   //   スクロールバーに変位があったときのイベント処理
   public void adjustmentValueChanged( AdjustmentEvent e ){
      if( e.getSource() == scrH )  sliderH = scrH.getValue();
      if( e.getSource() == scrV )  sliderV = scrV.getValue();
      repaint();
   }
   //   メインの描画ルーチン
   public void paint( Graphics g ){
      int v = 50 + sliderV;
      g.drawString( "SliderH="+sliderH, 5, 11 );
      g.drawString( "SliderV="+sliderV, 5, 22 );
      g.drawOval( 3*sliderH, v, sliderH, sliderH );
   }
}

付録2.キー入力

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class KeyInput extends Applet implements KeyListener{
   String text = " ";
   public void init(){
       setBackground( Color.lightGray );
       addKeyListener( this );
       requestFocus();
   }
   public void keyTyped( KeyEvent e ){
      text += e.getKeyChar();
      repaint();
   }
   public void keyPressed( KeyEvent e ){ }
   public void keyReleased( KeyEvent e ){   }
   public void paint( Graphics g ){
      g.drawString( text, 10, 50 );
   }
}

付録3. 立体球

import java.applet.*;
import java.awt.*;

public class fireball extends Applet
{
        public void paint(Graphics g)
        {
                fireball(g,100,100,50,'r');
        }

        public void fireball(Graphics g, int x0, int y0, int r, char color)
        {
                int xi, yi, dy, dx, dxy, z, bw, xmax, xmin, ymax, ymin;
                double a=-0.2, b=-0.2, c=1.0, d, m=13.7;
                g.setColor(new Color(0,0,0));
                d = Math.sqrt(Math.pow(a,2.0)+Math.pow(b,2.0)+Math.pow(c,2.0));
                a*=m/d;
                b*=m/d;
                c*=m/d;
                xmax=x0+r;
                xmin=x0-r;
                ymax=y0+r;
                ymin=y0-r;
                for(yi=ymin;yi<=ymax;yi++){
                        for(xi=xmin;xi<=xmax;xi++){
                                dx=xi-x0;
                                dy=yi-y0;
                                dxy=(int)(Math.sqrt(Math.pow(dx,2.0)+Math.pow(dy,2.0)));
                                if(dxy<=r){
                                        z=(int)(Math.sqrt(r*r-Math.pow(dxy,2.0)));
                                        bw=(int)((dx*a+dy*b+z*c)/r*18);
                                        if(bw<0) bw=0;
                                        if(color=='r') g.setColor(new Color(bw,0,0));
                                        else if(color=='g') g.setColor(new Color(0,bw,0));
                                        else if(color=='y') g.setColor(new Color(bw,bw,0));
                                        else g.setColor(new Color(bw,bw,bw));
                                g.drawLine(xi,yi,xi,yi);
                                }
                        }
                }
        }
}

2003.12.3