私は次のコードを使用しています、
UIManager.put("JFrame.activeTitleBackground", Color.red);
JFrameのツールバーの色を変更します。しかし、それはうまくいきませんでした。
JFrameでタイトルバーの色を変更することはできますか?
不可能です。トップレベルのJFrameは、基盤となるOSのルックアンドフィールによって制御されます。
の色を変更できInternalFrame
ます。
//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 );
}
}
);
}
}
Windows10の場合、メインのメソッドで次を使用できます。
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);
目標は、Win10で実際のアプリケーションの外観を実現することだと思います。ウィンドウのタイトルの色を実際に変更することはできないため、ウィンドウをカスタマイズするしかありません。
Metal LAFのバリアントをインストールする例は良い例ですが、この問題はもっと複雑であることがわかりました。実際のWin10ウィンドウには、win10の境界線、ユーザーがドラッグしてサイズ変更できる透明な境界線(影)が必要です。タイトルはWin10アイコンを使用する必要があり、ウィンドウボタンにはホバーします。
私はf.setUndecorated(true); 自分で描画し、コンテンツが通常どおりに機能するようにウィンドウのはめ込みを設定します。
(小さな印刷物:LAFを使用してSwingをカスタマイズできることは誰もが知っていますが、実際の生活では、LAFを作成することは、サブクラス化して独自の装飾を描画することよりも常にはるかに複雑です。余分な手間として、LAFアーキテクチャはそうではありません。すべてのコンポーネントプロパティを表現し、「ネイティブ」LAFはネイティブの外観(たとえば、win7ドロップダウンを確認)または感触(ドロップダウンはスライドアウトせず、win7ドロップダウンにはホバーがありませんが、ボタンにはホバーがあります)からかなり離れています。まともなOffice2016リボンなどのWindowsのようなコンポーネントの欠如、またはWin10の単純な「トグル」さえないことは言うまでもありません。実際、独自のコンポーネントを作成せずに多くのことを行うことはできません。)
私は少し遅れていることを知っていますが、これは他の人を助けるかもしれません:
インターネット全体を検索して、スイングベースのアプリのテーマ全体を変更する方法を見つけました。それから私はそうすることについての記事を見つけました:
誰かが言うかもしれません:
それは不可能であり、OSによって制御されます。
タイトルバーにアクセスする場合は、まず、ネイティブJavaエンジンライブラリにアクセスできる必要があります。幸いなことに、それには方法があります。
最初のステップ: JNAは、Javaコード以外に何も記述せずに、Javaプログラムにネイティブ共有ライブラリへの簡単なアクセスを提供します。したがって、このリポジトリを使用してそれらにアクセスできます:JNA。
Scroll down to readme and find the downloadable library.
一部の要素は、使用しているプラットフォームに基づいて延期される場合があります。したがってjna-platform-5.8.0.jar
、アプリを任意のプラットフォームと互換性のあるものにするために使用するようにしてください。
2番目のステップ: JNAライブラリの使用方法がわからない場合は、例としてこれを使用できます。例
とにかく、これはタイトルバーの色に関する問題を解決する可能性があります;)
主な記事:外部リンク
Help me improve my writing in English by telling me my mistakes :D
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));
はい、解決策を見つけました。今これを見ている人には役立つかもしれないと思います。
使用するFlatLaf
その点で多くのルックアンドフィールがあります。あなたはここでそれらを見ることができます。
タイトルバーの背景色と前景色を変更するには、次のコマンドを使用します。-
FlatLightLaf.setup(); //setting the look and feel
JFrame.setDefaultLookAndFeelDecorated(true);
frame.getRootPane().putClientProperty("JRootPane.titleBarBackground", new Color(23,180,252));
frame.getRootPane().putClientProperty("JRootPane.titleBarForeground", Color.white);
今、私はこれを達成することができます:-