The message displays normally with drawString(), moving to sprite based fonts is a performance thing. Blitting sprites to the screen is considerably faster than tracing round a font glyph for each letter.
If you move to OpenGL this becomes more important because while you can use dynamic textures converted from buffered images into which you've used drawString() its far more efficent to push all your sprite fonts off onto texture memory at initialisation onto the graphics card and just use changes to your texture coordinates to actually write the text to the screen.
There are of course positives and negatives to both methods.
As to a good algorithm I've found an array of character code indexed images works quite nicely in Java 2D. If you're looking for a solution for OpenGL it might be worth checking out NeHe Lesson 17 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17