Wie kann ich die Farbe der Titelleiste in JFrame ändern?
Frage
Ich verwende den folgenden Code,
UIManager.put("JFrame.activeTitleBackground", Color.red);
für Änderung der Symbolleiste Farbe in JFrame. Aber es hat nicht funktioniert.
Ist es möglich, die Farbe der Titelleiste in JFrame zu ändern?
Lösung
Es ist nicht möglich. Die oberste Ebene JFrame wird durch das Look & Feel des zugrunde liegenden Betriebssystem gesteuert wird.
Sie können die Farbe eines InternalFrame
ändern.
Andere Tipps
//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 );
}
}
);
}
}
Für Microsoft Windows 10, in der Haupt Methode können Sie verwenden:
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);
ich glaube, das Ziel ist es, eine reale Anwendung Blick auf Win10 achive. Da es nicht möglich ist, den Fenstertitel Farbe für echte ändern zu können, ist der einzige Weg das Fenster anpassen.
Obwohl Beispiele eine Variante des Metall LAF Installation ein gutes Beispiel gibt, fand ich, dass dieses Problem komplizierter. Ein echtes Win10 Fenster hat win10 Grenze haben, transparente Ränder (Schatten), wo der Benutzer für Resize ziehen. Der Titel hat Win10-Symbole zu verwenden, und Hover für die Fenster-Schaltflächen.
Ich würde f.setUndecorated (true); und ziehen Sie es auf eigene Faust, und stellen Sie die Einsätze des Fensters, so dass der Inhalt wie gewohnt arbeiten.
(Print Klein: obwohl wir alle „wissen“, dass ein Schwingen mit LAFS anpassen kann, im wirklichen Leben ein LAF schreibt, ist immer viel komplizierter mehr als nur Subklassen und Ihre eigene Dekoration zeichnen Als zusätzlichen Aufwand, der LAF. Architektur drückt nicht alle die Komponenteneigenschaften und die „native“ LAF ist ziemlich weit von dem nativen Look (zB auf den win7 Dropdown) oder das Gefühl (Dropdown-Listen nicht herausrutschen, win7 Dropdown-Listen haben keine schweben, sondern Tasten tun) Oh., nicht das Fehlen von Windows-ähnlichen Komponenten, wie eine ordentliche Büro 2016 Band oder sogar einem einfachen „Toggle“ von Win10 zu erwähnen. Wirklich, man kann nicht zu viel tun, ohne eigene Komponenten zu brauen.)
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));