Java: JLabel text alignment
What tabs don't work
The basic problem is that there is no fixed definition for tab, which more or less means move to the next tab position for the particular output device. It's mostly a historical feature that had a real hardware meaning (little metal "tabs" were inserted to stop the carriage).
In MS Word you can also move the tabs wherever you want. I use tab setting of 4 in the editor I use most frequently, but it used to be set a 3. Anyway, they surely didn't want to get into the mess of picking a given amount.
Why spaces don't work
And it's also impossible to align things using spaces with JOptionPane's variable pitch font.
One solution: HTML tables
One solution is to use HTML, a subset of which is allowed in JOptionPane. For example, to solve your problem.
JOptionPane.showMessageDialog(null, "<html><table><tr><td>Name</td><td>Pieces</td><td>Pay</td></tr>" + "<tr><td>" + name + "</td><td>" + pieces + "</td><td>" + pay + "</td></tr>" + "</table></html>");
Of course, this requires knowing HTML, a good idea anyway. :-)
Solution: String.format(...)
Another solution is to use the String.format(...)
method that's in recent versions of Java.