Когда вы меняете внешний вид, прежде чем выкладывать gui, все компоненты GUI знают, как нарисовать себя. Если изменить его на более позднем этапе вам необходимо обновить дерево пользовательского интерфейса, чтобы изменения распространяются на все компоненты:
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
ВИДЕТЬ java documentation об этом.
Это простой пример, который изменяет внешний вид при нажатии кнопки:
public static void main(String[] args) {
final JFrame frame = new JFrame("Test");
frame.add(new JButton(new AbstractAction("Press to change") {
int current = 0;
@Override
public void actionPerformed(ActionEvent e) {
LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
LookAndFeelInfo laf = lafs[current++ % lafs.length];
try {
UIManager.setLookAndFeel(laf.getClassName());
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
Если вы не хотите, чтобы pack
frame
(изменить размер его) просто позвонить repaint
вместо этого.
Изменение внешнего вида (как вы его изменяете, BTW?) Влияет на [вновь созданные JFrames] (http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JFrame .html # setDefaultLookAndFeelDecorated (boolean)) – khachik