Java雷達掃描圖

上圖,上代碼



package demo;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;

import javax.swing.JComponent;
import javax.swing.JFrame;

import blade.paint.FanShapedGradientPaint;

/**
 * 
 * @author Administrator
 * 
 */
public class RadarDemo extends JComponent {

	public static void main(String argv[]) {
		JFrame frame = new JFrame();
		frame.setContentPane(new RadarDemo());
		frame.setSize(800, 600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	@Override
	public void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		paintBackground(g);
		paintRadarRing(g);
		paintFanShapedGradient(g);
	}

	protected void paintBackground(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
	}

	protected void paintRadarRing(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		g.setColor(Color.green);
		Dimension d = this.getSize();
		double radius = Math.min(d.width, d.height) / 2;

		for (int r = 1; r <= 5; r++) {
			double R = r * radius / 5;
			double x = d.width / 2 - R;
			double y = d.height / 2 - R;
			Ellipse2D ellipse = new Ellipse2D.Double(x, y, R * 2, R * 2);
			g2d.draw(ellipse);
		}
	}

	protected void paintFanShapedGradient(Graphics g) {

		Graphics2D g2d = (Graphics2D) g;
		Composite oldComp = g2d.getComposite();
		AlphaComposite comp = AlphaComposite.getInstance(3, 0.5f);
		g2d.setComposite(comp);

		Dimension d = this.getSize();
		double radius = Math.min(d.width, d.height) / 2;
		double x = (d.width - radius * 2) / 2;
		double y = (d.height - radius * 2) / 2;

		FanShapedGradientPaint paint = new FanShapedGradientPaint(x, y, Math.PI / 2, Math.PI / 2, radius, Color.green,
				Color.black);

		g2d.setPaint(paint);

		Arc2D arc = new Arc2D.Double(x, y, radius * 2, radius * 2, 90, 90, Arc2D.PIE);
		g2d.fill(arc);

		g2d.setComposite(oldComp);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章