import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.font.*; public class Starry extends Canvas { private Image img; public Starry() { setBackground(Color.white); img = getToolkit().getImage("starry.gif"); try { MediaTracker tracker = new MediaTracker(this); tracker.addImage(img, 0); tracker.waitForID(0); } catch (Exception e) {} } public void paint(Graphics g) { Graphics2D g2; g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); int w = getSize().width; int h = getSize().height; FontRenderContext frc = g2.getFontRenderContext(); Font f = new Font("Times",Font.BOLD,w/10); String s = new String("The Starry Night"); TextLayout tl = new TextLayout(s, f, frc); float sw = (float) tl.getBounds().getWidth(); AffineTransform transform = new AffineTransform(); transform.setToTranslation(w/2-sw/2,h/4); Shape shape = tl.getOutline(transform); Rectangle r = shape.getBounds(); g2.setColor(Color.blue); g2.draw(shape); g2.setClip(shape); g2.drawImage(img, r.x, r.y, r.width, r.height, this); } public static void main(String s[]) { WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} public void windowClosed(WindowEvent e) {System.exit(0);} }; Frame f = new Frame("2D Text"); f.addWindowListener(l); f.add("Center", new Starry()); f.pack(); f.setSize(new Dimension(400, 300)); f.show(); } }