我使用以下代码,
UIManager.put("JFrame.activeTitleBackground", Color.red);
用于更改JFrame中的工具栏颜色。但它没有用。
是否可以更改JFrame中标题栏的颜色?
答案 0 :(得分:7)
//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 );
}
}
);
}
}
答案 1 :(得分:3)
不可能。顶级JFrame由外观和外观控制。对底层操作系统的感觉。
您可以更改InternalFrame
的颜色。
答案 2 :(得分:3)
对于Windows10,在main方法中,您可以使用:
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);
答案 3 :(得分:1)
我认为目标是在Win10上实现真正的应用程序外观。由于无法将窗口标题颜色更改为真实,唯一的方法是自定义窗口。
尽管安装Metal LAF变体的示例给出了一个很好的例子,但我发现这个问题更复杂。一个真正的Win10窗口必须有win10边框,透明边框(阴影),用户可以拖动它来调整大小。标题必须使用Win10图标,并悬停在窗口按钮上。
我f.setUndecorated(true);并自己绘制,并设置窗口的插图,以便内容正常工作。
(小字体:虽然我们都知道"知道"可以用LAF定制Swing,在现实生活中写一个LAF总是比继承和绘制你自己的装饰复杂得多。更麻烦的是,LAF架构并没有表达所有的组件属性,并且" native" LAF与本机外观(例如检查win7下拉列表)或感觉(下拉列表不会滑动)相距甚远out,win7下拉列表没有悬停,但按钮确实如此。哦,更不用说缺少类似Windows的组件,例如体面的Office 2016功能区,甚至是Win10的简单"切换"真的。 ,如果不酿造自己的组件,就不能做太多。)
答案 4 :(得分:0)
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));
答案 5 :(得分:0)
我知道我有点晚了,但这可能对其他人有帮助:
我搜索了整个互联网以找到更改我的基于 Swing 的应用的整个主题的方法。然后我找到了一篇关于这样做的文章:
有人可能会说:
<块引用>它不可能并且由操作系统控制。
如果你想访问标题栏,首先你应该有访问原生java引擎库的权限。幸运的是,有一种方法可以做到:
第一步: JNA 使 Java 程序可以轻松访问本机共享库,而无需编写除 Java 代码之外的任何内容。 因此,您可以使用此存储库访问它们:JNA。
Scroll down to readme and find the downloadable library.
根据您使用的平台,某些元素可能会延迟。因此,请务必使用 jna-platform-5.8.0.jar
使您的应用兼容任何平台。
第二步:如果您不知道如何使用 JNA 库,那么您可以以此为例:example
无论如何,这可以解决您关于标题栏颜色的问题;)
主条目:External Link
Help me improve my writing in English by telling me my mistakes :D