现在的位置: 首页 > 综合 > 正文

java绘制点阵数字(LED数字显示)

2018年01月30日 ⁄ 综合 ⁄ 共 4741字 ⁄ 字号 评论关闭
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Polygon;
import java.awt.image.BufferedImage;

public class LedNumber extends Component {

	private Polygon segmentPolygon[];
	private int numberSegment[][] = { { 0, 1, 2, 3, 4, 5 }, // 0
			{ 1, 2 }, // 1
			{ 0, 1, 3, 4, 6 }, // 2
			{ 0, 1, 2, 3, 6 }, // 3
			{ 1, 2, 5, 6 }, // 4
			{ 0, 2, 3, 5, 6 }, // 5
			{ 0, 2, 3, 4, 5, 6 }, // 6
			{ 0, 1, 2 }, // 7
			{ 0, 1, 2, 3, 4, 5, 6 }, // 8
			{ 0, 1, 2, 3, 5, 6 } // 9
	};

	    private int div[] = {1,10,100,1000,10000,100000};
	    private Image numberImage[];
	    private Color fontColor = Color.red;   //the color of number
	    private Color bgColor = Color.black;
	    private Color maskColor = Color.darkGray;
	    private int dWidth = 12;
	    private int dHeight = 21;
	    
	    public LedNumber(){
	    	init();
	    }
	    
	    public LedNumber(Color fc){
	    	fontColor=fc;
	    	init();
	    }
	    
	    public LedNumber(Color fc,Color bgc){
	    	fontColor=fc;
	    	bgColor=bgc;
	    	init();
	    }
	    
	    public LedNumber(Color fc,Color bgc,Color mc){
	    	fontColor=fc;
	    	bgColor=bgc;
	    	maskColor=mc;
	    	init();
	    }
	    
	    
	   

	    public void setBackGround(Color bgc){
	    	this.bgColor=bgc;
	    }
	    
	    public void setFontColor(Color fc){
	    	this.fontColor=fc;
	    }
	    
	    public void setMaskColor(Color mc){
	    	this.maskColor=mc;
	    }
	    
	    public void setDigitalWidth(int dWidth){
	    	this.dWidth=dWidth;
	    }
	    
	    public void setDigitalHeight(int dHeight){
	    	this.dHeight=dHeight;
	    }
	    
	   
	    public Image getLedImage(int dg,int bound){
	    	dg%=div[bound];
	    	Image image=new BufferedImage(dWidth*bound,dHeight,BufferedImage.TYPE_INT_RGB);
	    	Graphics g=image.getGraphics();
	    	bound--;
	    	for (int i = bound; i >= 0; i--) {
				g.drawImage(numberImage[dg / div[i]], (bound - i) * dWidth, 0, this);
				dg %= div[i];
			}
			return image;
	    }
	    
	    public void init(){
	    	segmentPolygon=new Polygon[7];
	    	numberImage=new Image[10];
	    	setNumberPolygon();
	    	setNumberImage();
	    	
	    }
	    
	   
	    public void setNumberImage(){
	    	int i=0;
	    	int j=0;
	    	int k;
	    	Graphics g;
	    	while(i<10){
	    		numberImage[i]=new BufferedImage(15,20,BufferedImage.TYPE_INT_RGB);
	    		g=numberImage[i].getGraphics();
	    		g.setColor(bgColor);
	    		g.fillRect(0, 0, 15, 20);
	    		g.setColor(Color.DARK_GRAY);
	    		j=0;
	    		while(j<numberSegment[8].length){
	    			k=numberSegment[8][j];
	    			g.fillPolygon(segmentPolygon[k]);
	    			j++;
	    		}
	    		g.setColor(fontColor);
	    		j=0;
	    		while(j<numberSegment[i].length){
	    			k=numberSegment[i][j];
	    			g.fillPolygon(segmentPolygon[k]);
	    			j++;
	    		}
	    		i++;
	    	}
	    }
	    
	    public void setNumberPolygon(){
	    	int mid=dHeight/2+1;
	    	segmentPolygon[0]=new Polygon();
	    	segmentPolygon[0].addPoint(2, 1);
	    	segmentPolygon[0].addPoint(dWidth-2, 1);
	    	segmentPolygon[0].addPoint(dWidth-5, 4);
	    	segmentPolygon[0].addPoint(4, 4);
	    	segmentPolygon[1]=new Polygon();
	    	segmentPolygon[1].addPoint(dWidth-1, 1);
	    	segmentPolygon[1].addPoint(dWidth-1, mid-1);
	    	segmentPolygon[1].addPoint(dWidth-2, mid-1);
	    	segmentPolygon[1].addPoint(dWidth-4, mid-3);
	    	segmentPolygon[1].addPoint(dWidth-4, 4);
	    	segmentPolygon[2] = new Polygon();
	        segmentPolygon[2].addPoint(dWidth-1, mid);
	        segmentPolygon[2].addPoint(dWidth-1, dHeight-2);
	        segmentPolygon[2].addPoint(dWidth-4, dHeight-5);
	        segmentPolygon[2].addPoint(dWidth-4, mid+1);
	        segmentPolygon[2].addPoint(dWidth-3, mid);
	        segmentPolygon[3] = new Polygon();
	        segmentPolygon[3].addPoint(dWidth-2, dHeight-1);
	        segmentPolygon[3].addPoint(1, dHeight-1);
	        segmentPolygon[3].addPoint(4, dHeight-4);
	        segmentPolygon[3].addPoint(dWidth-4, dHeight-4);
	        segmentPolygon[4] = new Polygon();
	        segmentPolygon[4].addPoint(1, dHeight-2);
	        segmentPolygon[4].addPoint(1, mid);
	        segmentPolygon[4].addPoint(3, mid);
	        segmentPolygon[4].addPoint(4, mid+1);
	        segmentPolygon[4].addPoint(4, dHeight-5);
	        segmentPolygon[5] = new Polygon();
	        segmentPolygon[5].addPoint(1, mid-1);
	        segmentPolygon[5].addPoint(1, 1);
	        segmentPolygon[5].addPoint(4, 4);
	        segmentPolygon[5].addPoint(4, mid-3);
	        segmentPolygon[5].addPoint(2, mid-1);
	        segmentPolygon[6] = new Polygon();
	        segmentPolygon[6].addPoint(3, mid-1);
	        segmentPolygon[6].addPoint(4, mid-2);
	        segmentPolygon[6].addPoint(dWidth-4, mid-2);
	        segmentPolygon[6].addPoint(dWidth-3, mid-1);
	        segmentPolygon[6].addPoint(dWidth-5, mid+1);
	        segmentPolygon[6].addPoint(4, mid+1);	    	
	    }	    
}

测试代码:

 
	import java.awt.BorderLayout;

	import javax.swing.BorderFactory;
	import javax.swing.ImageIcon;
	import javax.swing.JFrame;
	import javax.swing.JLabel;
	import javax.swing.JPanel;
	import javax.swing.SwingUtilities;
 

	public class TestLed2 extends JFrame {

		public static void main(String[] args) {
			new TestLed2();
		}

		private JPanel jp1;
		private JLabel jl1;
		private LedNumber led;
		private int timepassed;
		public TimeThread timeThread;

		public TestLed2() {
			setTitle("Led Number");
			setSize(300, 300);
			timepassed = 0;

			timeThread = new TimeThread();
			led = new LedNumber();

			jp1 = new JPanel();
			jl1 = new JLabel();
			jl1.setBorder(BorderFactory.createLoweredBevelBorder());		

			jl1.setIcon(new ImageIcon(led.getLedImage(timepassed, 5)));

			jp1.add(jl1);		
			
			this.add(jp1, BorderLayout.NORTH);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.setVisible(true);

			timeThread.start();
		}

		class TimeThread extends Thread {
			public TimeThread() {}

			@Override
			public void run() {
				while (timepassed < 1000 && Thread.currentThread() == timeThread) {
					SwingUtilities.invokeLater(new Runnable() {
						@Override
						public void run() {
							jl1.setIcon(new ImageIcon(led
									.getLedImage(timepassed, 5)));
						}
					});
					try {
						Thread.sleep(999);
					} catch (InterruptedException e) {
						System.out.println("interupped");
						e.printStackTrace();
					}
					timepassed++;
				}
			}
		}
	}

 

抱歉!评论已关闭.