Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package RoundSlider;
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
- import java.awt.geom.Arc2D;
- import java.awt.geom.Line2D;
- import java.awt.geom.Point2D;
- import java.awt.image.BufferedImage;
- import java.text.DecimalFormat;
- import javax.swing.JComponent;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import Graphics.Arcs;
- /**
- * @author Praveen Kumar
- *
- */
- public class RoundSlider extends JComponent implements MouseMotionListener,
- MouseListener {
- private static final long serialVersionUID = 1L;
- private BufferedImage bufferedimage = null;
- private int centerX, centerY, width, marginX = 40, marginY = 40,
- displayWidth;
- private double startAz = 0.0d, endAz = 90.0d, startAzPixelXY[],
- endAzPixelXY[];
- private int tickMarkXY[][];
- private final int AZ_INTERVAL = 10, END_AZ = 360;
- private Line2D.Double startLine = new Line2D.Double();
- private Line2D.Double endLine = new Line2D.Double();
- private AzimuthSlider parentPanel = null;
- private Point2D.Double mousePointXY = new Point2D.Double();
- private Arc2D.Double arcShade = new Arc2D.Double();
- private boolean strtAzFlag = false, endAzFlag = false;
- /* Colors */
- private Color startAzLineColor = Color.MAGENTA;
- private Color endAzLineColor = Color.WHITE;
- private Color BgColor = Color.BLACK;
- private Color AzStrColor = Color.RED;
- private Color OuterCircleColor = Color.BLUE;
- private Color InnerCircleColor = Color.CYAN;
- private Color AzMarkingLineColor = Color.GREEN;
- private boolean startFlag = false;
- private DecimalFormat azFormat = new DecimalFormat("###.0");
- public RoundSlider(int width) {
- this.width = width;
- displayWidth = width - (2 * marginX);
- centerX = centerY = width / 2;
- setSize(width, width);
- tickMarkXY = getTickMarkCoordinates(AZ_INTERVAL);
- startAzPixelXY = getPixelValue((displayWidth + 10) / 2, startAz, 1);
- startLine.setLine(centerX, centerY, centerX + startAzPixelXY[0],
- centerY + startAzPixelXY[1]);
- endAzPixelXY = getPixelValue((displayWidth + 10) / 2, endAz, 1);
- endLine.setLine(centerX, centerY, centerX + endAzPixelXY[0], centerY
- + endAzPixelXY[1]);
- addMouseListener(this);
- addMouseMotionListener(this);
- }
- @Override
- protected void paintComponent(Graphics g) {
- if (!startFlag)
- return;
- Graphics2D gb = (Graphics2D) g;
- bufferedimage = (BufferedImage) createImage(width, width);
- Graphics2D graphics = bufferedimage.createGraphics();
- // Background
- graphics.setColor(BgColor);
- graphics.fillOval(marginX, marginY, displayWidth, displayWidth);
- // outer circle
- graphics.setStroke(new BasicStroke(5F));
- graphics.setColor(OuterCircleColor);
- graphics.drawOval(marginX, marginY, displayWidth, displayWidth);
- // tick mark
- drawTickMark(graphics);
- graphics.setColor(AzStrColor);
- graphics.drawString("0", centerX - 2, marginY - 5);
- graphics.drawString("90", displayWidth + marginX + 5, centerY);
- graphics.drawString("270", marginX - 30, centerY);
- graphics.drawString("180", centerX, displayWidth + marginY + 20);
- // Az line
- graphics.setColor(startAzLineColor);
- graphics.setStroke(new BasicStroke(3F));
- /* startAzPixelXY = getPixelValue((displayWidth+10)/2, startAz, 1); */
- graphics.draw(startLine);
- /*
- * graphics.drawLine(centerX, centerY,
- * (int)(Math.round(startAzPixelXY[0])) + centerX, (int) (
- * Math.round(startAzPixelXY[1])) + centerY);
- */
- graphics.setColor(endAzLineColor);
- graphics.draw(endLine);
- /*
- * endAzPixelXY =getPixelValue((displayWidth+10)/2, endAz, 1);
- *
- * graphics.drawLine(centerX, centerY,
- * (int)(Math.round(endAzPixelXY[0])) + centerX, (int) (
- * Math.round(endAzPixelXY[1])) + centerY);
- */
- graphics.setColor(new Color(255, 255, 255, 127));
- int conStrtAz = 0, diffAz = 0;
- conStrtAz = (int) (90 - startAz);
- /*
- * if(conStrtAz<0) conStrtAz=360+conStrtAz;
- */
- diffAz = ((int) (startAz - endAz));
- graphics.fillArc(marginX, marginY, displayWidth, displayWidth,
- conStrtAz, diffAz);
- // Inner Circle
- graphics.setColor(InnerCircleColor);
- graphics.fillOval(centerX - 5, centerY - 5, 10, 10);
- gb.drawImage(bufferedimage, 0, 0, this);
- }
- private void drawTickMark(Graphics2D graphics) {
- graphics.setColor(AzMarkingLineColor);
- graphics.setStroke(new BasicStroke(2F));
- for (int i = 0; i < tickMarkXY.length; i++) {
- graphics.draw(new Line2D.Float(tickMarkXY[i][0] + centerX,
- tickMarkXY[i][1] + centerY, tickMarkXY[i][2] + centerX,
- tickMarkXY[i][3] + centerY));
- }
- }
- public static void main(String[] args) {
- RoundSlider slider = new RoundSlider(200);
- slider.startPainting();
- JFrame frm = new JFrame("Azimuth Slider");
- frm.add(slider);
- frm.setSize(250, 250);
- frm.setVisible(true);
- frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- @Override
- public void mouseDragged(MouseEvent me) {
- double az = getAzAndRangeOfMousePoint(me.getX(), me.getY(), centerX,
- centerY, 1)[0];
- if (endAzFlag) {
- endAz = az;
- endAzPixelXY = getPixelValue((displayWidth + 10) / 2, endAz, 1);
- endLine.x2 = centerX + endAzPixelXY[0];
- endLine.y2 = centerY + endAzPixelXY[1];
- }
- if (strtAzFlag) {
- startAz = az;
- startAzPixelXY = getPixelValue((displayWidth + 10) / 2, startAz, 1);
- startLine.x2 = centerX + startAzPixelXY[0];
- startLine.y2 = centerY + startAzPixelXY[1];
- }
- /*
- * double az = getAzAndRangeOfMousePoint(me.getX(), me.getY(), centerX,
- * centerY, 1)[0]; double
- * diffstart=startLine.ptLineDistSq(me.getX(),me.getY()); double
- * diffend=endLine.ptLineDistSq(me.getX(),me.getY());
- * System.out.println(diffstart+" "+diffend);
- *
- * System.out.println(startLine.getBounds().contains(me.getX(),me.getY()));
- * System.out.println(endLine.getBounds().contains(me.getX(),me.getY()));
- * if(diffstart<diffend) { startAz=az; startAzPixelXY =
- * getPixelValue((displayWidth+10)/2, startAz, 1);
- * startLine.x2=centerX+startAzPixelXY[0];
- * startLine.y2=centerY+startAzPixelXY[1]; } else { endAz=az;
- * endAzPixelXY = getPixelValue((displayWidth+10)/2, endAz, 1);
- * endLine.x2=centerX+endAzPixelXY[0];
- * endLine.y2=centerY+endAzPixelXY[1]; }
- */
- /*
- * if(startLine.contains(me.getX(),me.getY())) {
- * System.out.println("Start True"); }else
- * if(endLine.contains(me.getX(),me.getY())) { System.out.println("End
- * True"); }
- */
- /*
- * double az = getAzAndRangeOfMousePoint(me.getX(), me.getY(), centerX,
- * centerY, 1)[0];
- *
- *
- *
- *
- * double
- * startDiff=startAz-az,endDiff=endAz-az,startDiffAbs=Math.abs(startDiff),endDiffAbs=Math.abs(endDiff);
- *
- * System.out.println(startDiff+" "+endDiff);
- *
- *
- *
- * if (startDiffAbs < endDiffAbs) { if (startDiffAbs < 45) if (az > 0 &&
- * az < endAz) startAz = az;
- * } else if (endDiffAbs < 45) {
- *
- * if (az > startAz && az < 360) endAz = az; }
- *
- *
- *
- * System.out.println(startAz+" "+endAz+"\n");
- */
- if (parentPanel != null)
- parentPanel.strtAz.setText(azFormat.format(startAz));
- repaint();
- // startFlag=endAzFlag=false;
- }
- @Override
- public void mouseMoved(MouseEvent arg0) {
- }
- public int[][] getTickMarkCoordinates(int AzInterval) {
- int[][] xy = new int[360 / AzInterval][4];
- int cnt = 0;
- for (int az = 0; az < END_AZ; az += AzInterval) {
- double startXY[] = getPixelValue((displayWidth - 15) / 2, az, 1);
- double endXY[] = getPixelValue((displayWidth - 5) / 2, az, 1);
- xy[cnt][0] = (int) startXY[0];
- xy[cnt][1] = (int) startXY[1];
- xy[cnt][2] = (int) endXY[0];
- xy[cnt][3] = (int) endXY[1];
- cnt++;
- }
- return xy;
- }
- public static double[] getAzAndRangeOfMousePoint(int x, int y, int centerX,
- int centerY, double kmPerPixel) {
- double AzAndRange[] = new double[2];
- int xDash = x - centerX;
- int yDash = centerY - y;
- double az = Math.toDegrees(Math.atan2(xDash, yDash));
- if (az < 0)
- az += 360;
- double rng = Math.sqrt((xDash * xDash) + (yDash * yDash)) * kmPerPixel;
- AzAndRange[0] = az; // deg
- AzAndRange[1] = rng; // Km
- return AzAndRange;
- }
- public static double[] getPixelValue(double range, double az, double kmPixel) {
- double pixelPoint[] = new double[2];
- double rng = range / kmPixel;
- double azmth = Math.toRadians(-90 + az);
- pixelPoint[0] = (rng * Math.cos(azmth));
- pixelPoint[1] = (rng * Math.sin(azmth));
- return pixelPoint;
- }
- public void setBgColor(Color bgColor) {
- BgColor = bgColor;
- }
- public void setOutterCircleColor(Color clr) {
- OuterCircleColor = clr;
- }
- public void setInnerCircleColor(Color clr) {
- InnerCircleColor = clr;
- }
- public void setAzLinecolor(Color clr) {
- startAzLineColor = clr;
- }
- public void setMarkingColor(Color clr) {
- AzMarkingLineColor = clr;
- }
- public void setAzimuth(double az) {
- startAz = az;
- repaint();
- }
- public void startPainting() {
- startFlag = true;
- repaint();
- }
- public double getAzimuth() {
- return startAz;
- }
- public void setParent(AzimuthSlider slider) {
- parentPanel = slider;
- }
- @Override
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseEntered(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseExited(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mousePressed(MouseEvent e) {
- // TODO Auto-generated method stub
- System.out.println("Mouse pressed");
- if (startLine.intersectsLine(e.getX() - 10, e.getY() - 10,
- e.getX() + 10, e.getY() + 10)) {
- strtAzFlag = true;
- System.out.println("Start True");
- }
- if (endLine.intersectsLine(e.getX() - 10, e.getY() - 10, e.getX() + 10,
- e.getY() + 10)) {
- endAzFlag = true;
- System.out.println("end True");
- }
- }
- @Override
- public void mouseReleased(MouseEvent e) {
- // TODO Auto-generated method stub
- System.out.println("Mouse Released");
- strtAzFlag = endAzFlag = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement