Tuesday 12 June 2018

Create A Circle with Text color from java programing


Create A Circle with Text color from java programing



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author rajesh kumar shukla
 */

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

    public class CircleTextcolor extends Canvas {
    Frame myframe;
    TextField text;
    Font myfont;
    Color textcolor;
    Color circlecolor;
    
        public CircleTextcolor() {
        this("Serif", Font.BOLD, 18, Color.pink, Color.black);
    }
    
        public CircleTextcolor(String ff, int fs, int fz, Color bg, Color fg) {
        setBackground(bg);
        circlecolor = bg.brighter();
        textcolor = fg;
        myfont = new Font(ff, fs, fz);
        
        text = new TextField("Text on a circle using Java 2D Graphics!");
        myframe = new Frame("CircleTextcolor");
        myframe.add(text, BorderLayout.NORTH);
        myframe.add(this, BorderLayout.CENTER);
        myframe.setSize(new Dimension(300,340));
        myframe.setLocation(150,140);
            myframe.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
            text.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                repaint();
            }
        });
        myframe.setVisible(true);
    }
    
        public void paint(Graphics g) {
        String st = text.getText();
        if (st.length() == 0) return;
            if (g instanceof Graphics2D) {
            Dimension cd = getSize();
            Point pt = new Point(cd.width / 2, cd.height / 2);
            int radius = (int)(pt.x * 0.84);
            g.setColor(circlecolor);
            g.drawArc(pt.x - radius, pt.y - radius, 
            radius*2-1, radius*2-1, 
            0, 360);
            g.setColor(textcolor);
            g.setFont(myfont);
            
            drawCircleText((Graphics2D)g, st, pt, radius, -Math.PI/2, 1.0);
        }
            else {
            System.out.println("Cannot draw curved text without a Graphics2D");
        }
    }
    
    /**
    * Draw a piece of text on a circular curve, one
    * character at a time. This is harder than it looks.
    */
    static void drawCircleText(Graphics2D g, String st, Point center,
    double r, double a1, double af)
        {
        double curangle = a1;
        Point2D c = new Point2D.Double(center.x, center.y);
        char ch[] = st.toCharArray();
        FontMetrics fm = g.getFontMetrics();
        AffineTransform xform1, cxform;
        xform1 = AffineTransform.getTranslateInstance(c.getX(),c.getY());
            for(int i = 0; i < ch.length; i++) {
            double cwid = (double)(getWidth(ch[i],fm));
                if (!(ch[i] == ' ' || Character.isSpaceChar(ch[i]))) {
                cwid = (double)(fm.charWidth(ch[i]));
                cxform = new AffineTransform(xform1);
                cxform.rotate(curangle, 0.0, 0.0);
                String chstr = new String(ch, i, 1);
                g.setTransform(cxform);
                g.drawString(chstr, (float)(-cwid/2), (float)(-r));
            }
            
            // compute advance of angle assuming cwid<
                if (i < (ch.length - 1)) {
                double adv = cwid/2.0 + fm.getLeading() + getWidth(ch[i + 1],fm)/2.0;
                curangle += Math.sin(adv / r);
            }
        }
    }
    
        static int getWidth(char c, FontMetrics fm) {
            if (c == ' ' || Character.isSpaceChar(c)) {
            return fm.charWidth('n');
        }
            else {
            return fm.charWidth(c);
        }
    }
    
        public static void main(String args[]) {
        CircleTextcolor ctd;
        ctd = new CircleTextcolor();
    }
}

0 comments:

Post a Comment