Search code examples
java-memidplcdui

Modify char size font


I have a question about changing the size of a character which is painted with drawChar function.

I have found a solution with:

setFont(Font.getFont(Font.FONT_STATIC_TEXT, Font.STYLE_BOLD, Font.SIZE_LARGE));

But there is only 3 possibility for the size of the character.
Is-there a way to increase the size?
Or it isn't possible?


Solution

  • You could use a custom monospaced font. Create a PNG file with all the characters you might paint and use below code from http://smallandadaptive.blogspot.com.br/2008/12/custom-monospaced-font.html:

    
        public class MonospacedFont {
    
        private Image image;
        private char firstChar;
        private int numChars;
        private int charWidth;
    
        public MonospacedFont(Image image, char firstChar, int numChars) {
            if (image == null) {
                throw new IllegalArgumentException("image == null");
            }
            // the first visible Unicode character is '!' (value 33)
            if (firstChar <= 33) {
                throw new IllegalArgumentException("firstChar <= 33");
            }
            // there must be at lease one character on the image
            if (numChars <= 0) {
                throw new IllegalArgumentException("numChars <= 0");
            }
            this.image = image;
            this.firstChar = firstChar;
            this.numChars = numChars;
            this.charWidth = image.getWidth() / this.numChars;
        }
    
        public void drawString (Graphics g, String text, int x, int y) {
            // store current Graphics clip area to restore later
            int clipX = g.getClipX();
            int clipY = g.getClipY();
            int clipWidth = g.getClipWidth();
            int clipHeight = g.getClipHeight();
            char [] chars = text.toCharArray();
    
            for (int i = 0; i < chars.length; i++) {
                int charIndex = chars[i] - this.firstChar;
                // current char exists on the image
                if (charIndex >= 0 && charIndex <= this.numChars) {
                    g.setClip(x, y, this.charWidth, this.image.getHeight());
                    g.drawImage(image, x - (charIndex * this.charWidth), y, Graphics.TOP | Graphics.LEFT);
                    x += this.charWidth;
                }
            }
    
            // restore initial clip area
            g.setClip(clipX, clipY, clipWidth, clipHeight);
        }
        }
    
    

    Here is a sample code that uses this class.

    
        Image img;
        try {
            img = Image.createImage("/monospaced_3_5.PNG");
            MonospacedFont mf = new MonospacedFont(img, '0', 10);
            mf.drawString(g, "9876543210", 40, 40);
        } catch (IOException e) {
            e.printStackTrace();
        }