Search code examples
java-mecanvaspaintlcdui

j2me drawChar abnormal character spacing?


I write some code to draw a text on a j2me canvas without using drawString.
For some reasons I can't use drawString method.
So, when I run my program, I deal with abnormal character spacing.
Please help me to solve the problem. This is my code:

public void paint(Graphics g) {
        ...
        String str = ... ;
        int x0 = 10;
        int y0 = getHeight() - 50;
        Font f = g.getFont();
        int charWidth = 0;
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            charWidth = f.charWidth(ch);
            x0 += charWidth;
            g.drawChar(ch, x0, y0, 0);            
        }
        ...
}

Solution

  • instead use this:

    public void paint(Graphics g) {
            ...
            String str = ... ;
            int x0 = 10;
            int y0 = getHeight() - 50;
            Font f = g.getFont();
            int lastWidth = 0;
            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);
                g.drawChar(ch, x0 + lastWidth, y0, 0);
                lastWidth += f.charWidth(ch);
            }
            ...
    }     
    

    In your drawChar method,you use 0(it is equal to Graphics.TOP|Graphics.LEFT) so you would increase "lastWidth" after draw current char,or use another anchor(for example Graphics.TOP|Graphics.RIGHT) for drawChar.