вместо этого используйте это:
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);
}
...
}
В вашем методе drawChar вы используете 0 (он равен Graphics.TOP | Graphics.LEFT), поэтому вы увеличиваете «lastWidth» после отрисовки текущего символа илииспользуйте другой якорь (например, Graphics.TOP | Graphics.RIGHT) для drawChar.