We're a community of 1077K IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,076,414 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

how to make it like the numbers in a clock

this is the code!

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Clock extends JPanel{

    public void paint (Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        String s = "12 1 2 3 4 5 6 7 8 9 10 11";

        Font font = new Font("Courier", Font.BOLD,12);
        g2d.translate(100,200);

        FontRenderContext frc = g2d.getFontRenderContext();

        GlyphVector gv = font.createGlyphVector(frc, s);
        int length = gv.getNumGlyphs();

        for(int i = 0; i < length; i++) {
            Point2D p = gv.getGlyphPosition(i);
            AffineTransform at = AffineTransform.getTranslateInstance(p.getX(), p.getY());
            at.rotate((double) i / (double) (length + 25) * Math.toRadians(360));

            Shape glyph = gv.getGlyphOutline(i);
            Shape transformedGlyph = at.createTransformedShape(glyph);

            g2d.fill(transformedGlyph);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("CLOCK");
        frame.add(new Clock());
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}

help pls ican't figure it out...to ma ke it like the numbers in the clock...or is there wrong in this code??

4
Contributors
3
Replies
3 Hours
Discussion Span
8 Months Ago
Last Updated
4
Views
eirene08
Newbie Poster
1 post since Aug 2012
Reputation Points: 0
Solved Threads: 0
Skill Endorsements: 0

what do you mean: numbers in a clock?

stultuske
Industrious Poster
4,382 posts since Jan 2007
Reputation Points: 1,318
Solved Threads: 610
Skill Endorsements: 24

I ran the code and it displays the numbers 1-12 in a circle, like a clock.
Except: the circle is distorted - more like a pear lying on its side, and the numbers are rotated so 12 is upside-down.
So it's safe to conclude that the code basically works, but the exact rotations and translations (AffineTransforms) need some tuning.

JamesCherrill
... trying to help
Moderator
8,527 posts since Apr 2008
Reputation Points: 2,583
Solved Threads: 1,456
Skill Endorsements: 30

Why are you making it so complicated? Also, what you really only need is translate and some rotate point using the angle from a center point in order to get the location of the draw string. Why do you use AffineTransform?

Here is a method I implemented that returns an integer array of point (x,y) given a distance from the center point and radiant (not degree).

private int[] getPointXY(int dist, double rad) {
  int[] res = new int[2];
  res[0] = (int) ((dist * Math.cos(rad)) + dist);
  res[1] = (int) (-1*(dist * Math.sin(rad)) + dist);
  return res;
}

Then when you call it, you need to compute the radiant a bit because by default the computation is counter-clock-wise and the starting point is from the far right of the center point.

for(int i=1; i <= 12; i++) {
  // rotate the point
  // -30 is from -1 (change direction to clock-wise)
  // and 30 (each number is tilted 30 degrees)
  // toRad is the multiplication to convert degree to radiant --> Math.PI/180
  // Math.PI/2 is to tile the starting point from far right to top most
  int[] pt = getPointXY(distance, (-30*i*toRad)+(Math.PI/2));
  // translate the point here
  // draw the string from the center point
  // remmeber that the string location drawn from its bottom left
}
Attachments showclock.png 8.35KB
Taywin
Posting Maven
2,633 posts since Apr 2010
Reputation Points: 275
Solved Threads: 375
Skill Endorsements: 17

This article has been dead for over three months: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
View similar articles that have also been tagged:
 
© 2013 DaniWeb® LLC
Page rendered in 0.0693 seconds using 2.7MB