2015-10-18 2 views
0

Disons que j'ai 2 JFrames. Après avoir défini JFrame sur visible, vous ne pouvez pas sembler changer le LAF sans définir la visibilité à caché et normal d'abord. Cela signifie un scintillement, et le JFrame sautant vers le haut.Comment puis-je faire en sorte qu'un certain JFrame ait un LAF différent des autres JFrames?

Sinon, vous obtenez ceci:

(Certains mélange entre le métal et le système Ubuntu LAF)

En outre, repeindre ne semble pas aider. Maintenant, disons que le premier JFrame a été fait en utilisant le Metal LAF. Après l'affichage, le LAF est remplacé par le système LAF. Ensuite, le second apparaît. Maintenant, le premier est affecté par cette chose drôle. La seconde est OK. Pourquoi est-ce ainsi? Ceci est le code que j'ai:

public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException { 
    JFrame first = new JFrame("First"); 
    first.add(new JButton("Click me, I look funny")); 
    first.setPreferredSize(new Dimension(100, 100)); 
    first.pack(); 
    first.setVisible(true); 

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

    first.repaint(); 

    JFrame second = new JFrame("Second"); 
    second.add(new JButton("Click")); 
    second.setPreferredSize(new Dimension(100, 100)); 
    second.pack(); 
    second.setVisible(true); 
    second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

Alors, comment puis-je faire la nouvelle LAF n'affecte 1 JFrame?

Ou est le LAF global et ne peut pas être appliqué à seulement 1 JFrame?

+0

* "Disons que j'ai 2 JFrames." * Voir (http [Utilisation de JFrames multiples, Bonnes pratiques/Bad?] : //stackoverflow.com/q/9554636/418556) –

Répondre

1

Il me semble qu'ils sont appliqués lorsque vous créez les JFrames, il suffit donc de modifier le paramètre avant de créer le JFrame suivant.

par exemple:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
JFrame first = new JFrame("First"); 
first.add(new JButton("Click me, I look funny")); 
first.setPreferredSize(new Dimension(300, 100)); 
first.pack(); 
first.setVisible(true); 

UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 

JFrame second = new JFrame("Second"); 
second.add(new JButton("Click")); 
second.setPreferredSize(new Dimension(100, 100)); 
second.setLocation(300, 0); 
second.pack(); 
second.setVisible(true); 
second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

produites:

enter image description here