Part of your problem is that you're using some magical thinking here, assuming that a variable has more power than it actually has. When you create your Comic Sans font like so:
Font fontComic = new Font(fTheme, Font.BOLD, fsize);
The font is done; it is created.
Later if you change fTheme, like so:
} else if (source == comicSans) {
fTheme = "Comic Sans MS";
label.setFont(fontComic);
}
This will have no effect on the font, comicSans, none at all, since it has been already created, and its state is fixed, and changing the variable that was originally used to set the font will have no effect on the font object already created. You have the very same problem with your fsize variable.
Solution: don't do this. Either create your new font with the correct Font name from the get go, or create the new Font when needed.
For the size, this can be done via get font and derive font:
float newSize = 36f; // this has to be a float
Font newFont = label.getFont().deriveFont(newSize);
label.setFont(newFont);
So you could create your Font variables with Fonts of the correct type, each using its own correct Font name, and then change the font by swapping in the properly created font, and then changing its size using the code shown above.