2010-03-20 7 views
2

J'utilise le code suivant,comment puis-je changer la couleur de la barre de titre dans JFrame?

UIManager.put("JFrame.activeTitleBackground", Color.red); 

pour changer la couleur de la barre d'outils en JFrame. Mais ça n'a pas marché.

Est-il possible de changer la couleur de la barre de titre dans JFrame?

+2

On dirait que deux gars travaillent sur le même problème de devoirs pour moi. Coïncidence? – duffymo

+0

Peut-être pas les devoirs, mais certainement le même problème! –

+0

Attendez une minute - un gars veut changer la couleur de la barre de titre, mais Venkats parle de la barre d'outils qui est généralement comprise comme la zone sous les menus qui contient les boutons principaux ("ouvrir", "enregistrer", "copier "," coller ", etc ...) – Thomas

Répondre

1

Ce n'est pas possible. Le niveau supérieur JFrame est contrôlé par l'aspect & du système d'exploitation sous-jacent.

Vous pouvez changer la couleur d'un InternalFrame.

+0

Il est possible avec certains paquets de look-and-feel ou code de look-and-feel personnalisé. Il y a un exemple ci-dessous de 'user1781452'. – Enwired

1
UIManager.put("InternalFrame.activeTitleBackground", new ColorUIResource(Color.black)); 
UIManager.put("InternalFrame.activeTitleForeground", new ColorUIResource(Color.WHITE)); 
UIManager.put("InternalFrame.titleFont", new Font("Dialog", Font.PLAIN, 11)); 
+0

OP demande la modification des couleurs JFrame. La réponse est pour les cadres internes. –

4
//source : javax/swing/plaf/metal/MetalTitlePane.java 
    import javax.swing.*; 
    import javax.swing.plaf.*; 
    import javax.swing.plaf.metal.*; 
    public class TitleColor 
    { 
     public static void main_helper (String args[]) 
     { 
      JFrame f = new JFrame(); 
      f.setDefaultCloseOperation 
      (
       JFrame.DISPOSE_ON_CLOSE 
      ); 
      f.setSize (300, 300); 
      f.setLocationRelativeTo (null); 

      f.setUndecorated (true); 
      f.getRootPane().setWindowDecorationStyle 
      (
       JRootPane.FRAME 
      ); 

      JPanel panel = new JPanel(); 
      panel.setBackground (java.awt.Color.white); 
      f.setContentPane (panel); 

      DefaultMetalTheme z = 
      new DefaultMetalTheme() 
      { 
       //inactive title color 
       public ColorUIResource 
       getWindowTitleInactiveBackground() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 

       //active title color 
       public ColorUIResource 
       getWindowTitleBackground() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 
       //start ActiveBumps 
       public ColorUIResource 
       getPrimaryControlHighlight() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 
       public ColorUIResource 
       getPrimaryControlDarkShadow() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 

       public ColorUIResource 
       getPrimaryControl() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 
       //end ActiveBumps 

       //start inActiveBumps 
       public ColorUIResource 
       getControlHighlight() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 

       public ColorUIResource 
       getControlDarkShadow() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 

       public ColorUIResource 
       getControl() 
       { 
        return new ColorUIResource 
         (java.awt.Color.orange); 
       } 
       //end inActiveBumps 



      }; 



      MetalLookAndFeel.setCurrentTheme 
      (
       z 
      ); 

      try 
      { 
       UIManager.setLookAndFeel 
       (
        new MetalLookAndFeel() 
       ); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

      SwingUtilities.updateComponentTreeUI (f); 


      f.setVisible (true); 


     } 
     public static void main (final String args[]) 
     { 
      SwingUtilities.invokeLater 
      (
       new Runnable() 
       { 
        public void run() 
        { 
         main_helper (args); 
        } 
       } 
      ); 
     } 
    } 
+0

Bon exemple. Cependant, cela ne change pas seulement la couleur, mais installe un nouveau LAF, qui rend l'application semblable à celle des années 90. :) –

-1

Pour Windows 10, dans votre principale méthode, vous pouvez utiliser:

UIDefaults uiDefaults = UIManager.getDefaults(); 
uiDefaults.put("activeCaption", new javax.swing.plaf.ColorUIResource(Color.gray)); 
uiDefaults.put("activeCaptionText", new javax.swing.plaf.ColorUIResource(Color.white)); 
JFrame.setDefaultLookAndFeelDecorated(true); 
+0

Cela ne fonctionne pas. Sur win7, le titre de la fenêtre en verre par défaut est affiché. –

0

Je pense que le but est de achive un vrai regard sur l'application Win10. Comme il n'est pas possible de changer la couleur du titre de la fenêtre pour de vrai, le seul moyen est de personnaliser la fenêtre.

Bien que des exemples d'installation d'une variante de la Metal LAF donne un bon exemple, j'ai trouvé que ce problème est plus compliqué. Une vraie fenêtre Win10 doit avoir une bordure win10, une bordure transparente (ombre) où l'utilisateur peut faire glisser pour redimensionner. Le titre doit utiliser les icônes Win10 et survole les boutons de la fenêtre.

Je f.setUndecorated (true); et dessinez-le moi-même, et définissez les encarts de la fenêtre pour que le contenu fonctionne comme d'habitude.

(en petits caractères: bien que nous sachions tous que l'on peut personnaliser Swing avec les LAF, dans la vraie vie écrire un LAF est toujours beaucoup plus compliqué que de sous-classer et dessiner votre propre décoration. L'architecture LAF n'exprime pas toutes les propriétés des composants, et le LAF "natif" est assez éloigné de l'aspect natif (par exemple, le menu déroulant win7) ou le toucher (les listes déroulantes ne glissent pas, les dropdowns win7 n'ont pas de survol, mais les boutons Oh, sans parler de l'absence de composants ressemblant à Windows, comme un ruban Office 2016 décent, ou même un simple "bascule" de Win 10. Vraiment, vous ne pouvez pas en faire trop sans préparer vos propres composants.)