I've never come across any problems with displaying UTF8 Strings in Swing components.
My guess is that the Strings are becoming corrupt before they are reaching Swing - likely because the Strings are being constructed from data incorrectly assumed to be 1 byte/character.
Where are the Strings coming from? what format are they being provided in? and how are you constructing the String objects?
The String objects are fine when I spit them out (later) to a text file.
I read them from a file with BufferedReader, store them in a String object, then put them into a StringBuffer, and JTextArea.setText(buffer.toString()). Then later a write them to a file, which has no formatting problems.