Eu geralmente faço um método do tipo:
public void mudaAparencia(String aparencia){
try {
UIManager.setLookAndFeel(aparencia);
SwingUtilities.updateComponentTreeUI(frame);
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (UnsupportedLookAndFeelException e){
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
frame.repaint();
//frame.pack();-não usar!
}
Onde eu passo as Strings correspondentes a cada UI:
protected static final String mac =
"com.birosoft.liquid.LiquidLookAndFeel";
protected static final String metal =
"javax.swing.plaf.metal.MetalLookAndFeel";
protected static final String skin =
"com.l2fprod.gui.plaf.skin.SkinLookAndFeel";
protected static final String windows =
"de.muntjak.tinylookandfeel.TinyLookAndFeel";
protected static final String kunststoff =
"com.incors.plaf.kunststoff.KunststoffLookAndFeel";
a uma chamada a mudaAparencia(meuLFeel);
por exemplo, em cada menu item. Eu normalmente deixo as Janelas que abrem dentro do Frame principal como janelas-filhas, pq aí quando vc solicitar a mudança(por exemplo ao clicar num menu item), será automática a mudança nas filhas. :wink: