font

Draw mixed style text example

In this tutorial you are going to see how can you draw a line of text that each word has a different style

In order to draw mixed style text in Java, all you have to do is:

  • Set the desired font if different from default font using the Font class
  • Use AttributedString to create String that you can work on each substring
  • Use its addAttribute method to set the font family and the color of substrings
  • Get an TextLayout instance and give a Graphics.getFontRenderContext() as an arguments to its constructor, to create a drawble string

Take a look at the code snippet that follows:

package com.javacodegeeks.snippets.desktop;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.text.AttributedString;

public class DrawMixedStyleText {

    public static void main(String[] args) {

  // Create a frame

  Frame frame = new Frame();

  // Add a component with a custom paint method

  frame.add(new CustomPaintComponent());

  // Display the frame

  int frameWidth = 300;

  int frameHeight = 300;

  frame.setSize(frameWidth, frameHeight);

  frame.setVisible(true);

    }

    /**

* To draw on the screen, it is first necessary to subclass a Component and

* override its paint() method. The paint() method is automatically called

* by the windowing system whenever component's area needs to be repainted.

*/
    static class CustomPaintComponent extends Component {

  public void paint(Graphics g) {

    // Retrieve the graphics context; this object is used to paint shapes

    Graphics2D g2d = (Graphics2D) g;

  /**

    * The coordinate system of a graphics context is such that the

    * origin is at the northwest corner and x-axis increases toward the

    * right while the y-axis increases toward the bottom.

    */

    int x = 0;

    int y = 20;

    // Set the desired font if different from default font

    Font font = new Font("Serif", Font.PLAIN, 16);

    // Apply styles to text

    AttributedString astr = new AttributedString("This is a test string");

    astr.addAttribute(TextAttribute.FONT, font, 0, 4);

    astr.addAttribute(TextAttribute.FOREGROUND, Color.RED,5,9);

    astr.addAttribute(TextAttribute.BACKGROUND, Color.CYAN, 10, 21);

    // Draw mixed-style text  such that its base line is at x, y

    TextLayout tl = new TextLayout(astr.getIterator(), g2d.getFontRenderContext());

    tl.draw(g2d, x, y);

  }

    }

}

 
This was an example on how to draw mixed styled text in Java.

Byron Kiourtzoglou

Byron is a master software engineer working in the IT and Telecom domains. He is an applications developer in a wide variety of applications/services. He is currently acting as the team leader and technical architect for a proprietary service creation and integration platform for both the IT and Telecom industries in addition to a in-house big data real-time analytics solution. He is always fascinated by SOA, middleware services and mobile development. Byron is co-founder and Executive Editor at Java Code Geeks.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button