//
/* ---------------------------------------------------------------------------------------------- seven_seg_led.java 7セグメント LED ver. 1.10 (JDK 1.02) ueyama@infonet.co.jp 2000.04.07 update: 2009.11.13 ---------------------------------------------------------------------------------------------- */ import java.applet.*; import java.awt.*; import java.util.*; public class led7seg extends Applet implements Runnable { // Segment a b c d e f g LED 点灯パターンデータ boolean L[][]={{true, true, true, true, true, true, false}, // 0 {false,true, true, false,false,false,false}, // 1 a {true, true, false,true, true, false,true }, // 2 ------- {true, true, true, true, false,false,true }, // 3 f / / b {false,true, true, false,false,true, true }, // 4 / g / {true, false,true, true, false,true, true }, // 5 ------- {true, false,true, true, true, true, true }, // 6 e / / c {true, true, true, false,false,false,false}, // 7 / d / {true, true, true, true, true, true, true }, // 8 ------- {true, true, true, true, false,true, true }}; // 9 int X[]={30,59,52,16,10,18,25}; // セグメント表示 X座標 int Y[]={10,16,60,95,60,16,53}; // セグメント表示 Y座標 int N; // 表示数値 int T=0; // タイマー用カウンタ Image Img; Random Rnd=new Random(); Thread th=null; public void start() { if(th==null) { th=new Thread(this); th.start(); } } public void update(Graphics g) { paint(g); } public void init() { String bg=getParameter("bgcolor"); int bgc=Integer.valueOf(bg,16).intValue(); setBackground(new Color(bgc)); MediaTracker mt=new MediaTracker(this); Img=getImage(getCodeBase(), getParameter("figure")); mt.addImage(Img, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; N=Math.abs(Rnd.nextInt())%10; } public boolean inside(int x, int a, int b) { return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false; } public void dsp_g(int x, int y, int m, int n, int c) // LED、数字の表示 { Graphics gx=getGraphics(); int w=0, h=0, ox=0, oy=0; switch(c) { case 0: w=41; h=11; ox= 0; oy= 0; break; // segment a case 1: w=16; h=40; ox=48; oy=33; break; // segment b case 2: w=15; h=41; ox=33; oy=33; break; // segment c case 3: w=41; h=11; ox= 0; oy=22; break; // segment d case 4: w=17; h=41; ox=16; oy=33; break; // segment e case 5: w=16; h=40; ox= 0; oy=33; break; // segment f case 6: w=36; h=11; ox= 0; oy=11; break; // segment g case 7: w= 5; h= 7; ox= 0; oy=74; break; // 数字 } gx.clipRect(x,y,w,h); gx.drawImage(Img,x-(ox+w*m),y-(oy+h*n),this); gx.dispose(); } public void paint(Graphics g) { int i; g.clearRect(0,0,size().width,size().height); g.setColor(new Color(0,0,0)); g.fillRect(0,0,85,116); // 7seg LED 本体 for(i=0;i<7;i++) if(L[N][i]) dsp_g(X[i],Y[i],0,0,i); // 7seg LED セグメントの表示 for(i=0;i<10;i++) dsp_g(i*8+3,120,i,(i==N)?1:0,7); // 数字の表示 } public void run() { while(true) { try { Thread.sleep(100); } catch (InterruptedException e){} T++; if(T%25==0) { N=Math.abs(Rnd.nextInt())%10; // 表示数値を乱数で決める repaint(); } } } public boolean mouseDown(Event e, int x, int y) // マウスをクリック { if(y>116 && inside(x,2,81)) // 数字をクリック { N=(x-2)/8; T=0; repaint(); // クリックされた数字を表示 } return true; } public void stop() { if(th!=null) { th.stop(); th=null; } } } //戻る