1: /* 2: * meter.java 0.1 96/08/01 3: * 4: * Copyright (c) 1996 MARUYAMA Fujio All Rights Reserved. 5: * 6: * Permission to use, copy, modify, and distribute this software 7: * and its documentation for NON-COMMERCIAL purposes and without 8: * fee is hereby granted provided that this copyright notice 9: * appears in all copies. 10: * 11: * Mail : maruyama@wakhok.ac.jp 12: * 13: */ 14: 15: import java.awt.*; 16: import java.applet.*; 17: 18: class Meter extends Canvas implements Runnable{ 19: static final double Pi = Math.PI ; 20: public int centerX ; 21: public int centerY ; 22: public int Radius ; 23: public int newX ; 24: public int newY ; 25: public int priority ; 26: public Dimension minSize ; 27: public Thread moveMeter= null ; 28: public static Color carray[] = new Color[4]; 29: 30: static{ 31: carray[0] = Color.blue; 32: carray[1] = Color.green; 33: carray[2] = Color.yellow; 34: carray[3] = Color.red; 35: } 36: 37: Meter(int r ,int p){ 38: centerX = r ; 39: centerY = r ; 40: Radius = r ; 41: priority = p ; 42: minSize = new Dimension(2*r+ 10, 2*r+ 20); 43: } 44: 45: public Dimension preferredSize(){ 46: return minimumSize(); 47: } 48: 49: public void start(){ 50: if ( moveMeter == null ){ 51: moveMeter = new Thread(this); 52: moveMeter.setPriority(priority); 53: moveMeter.start(); 54: } 55: } 56: 57: public synchronized Dimension minimumSize(){ 58: return minSize; 59: } 60: 61: public void disp( int degree){ 62: double radian = degree * Pi / 180.0; 63: newX = (int ) ( Radius * Math.sin( radian )) + centerX ; 64: newY = -(int ) ( Radius * Math.cos( radian )) + centerY ; 65: repaint(); 66: try { 67: Thread.sleep(10); 68: } catch (Exception e){} 69: } 70: 71: public void paint(Graphics g){ 72: g.setColor( carray[priority-1] ); 73: g.drawOval(0,0, 2*Radius , 2*Radius); 74: g.drawLine(centerX,centerY, newX,newY); 75: } 76: 77: public void run(){ 78: long count = 0; 79: while( count++ < 3600 ){ 80: int c = (int) ( count % 360 ) ; 81: disp( c ); 82: } 83: } 84: 85: public static void main(String argv[]){ 86: int r = 50 ; 87: Frame f = new Frame(); 88: Panel p = new Panel(); 89: p.setLayout(new GridLayout(1,0)); 90: 91: Meter m1 = new Meter(r,1); 92: Meter m2 = new Meter(r,2); 93: Meter m3 = new Meter(r,3); 94: Meter m4 = new Meter(r,2); 95: Meter m5 = new Meter(r,4); 96: 97: p.add(m1); 98: p.add(m2); 99: p.add(m3); 100: p.add(m4); 101: p.add(m5); 102: 103: f.add("Center",p); 104: f.resize(10*r+60, 2*r+40); 105: f.show(); 106: f.validate(); 107: 108: m1.start(); 109: m2.start(); 110: m3.start(); 111: m4.start(); 112: m5.start(); 113: } 114: }