Как я могу изменить цвет заголовка в JFrame?
Я использую следующий код,
UIManager.put("JFrame.activeTitleBackground", Color.red);
для изменения цвета панели инструментов в JFrame. Но это не сработало.
Можно ли изменить цвет заголовка в JFrame?
8 ответов
Это невозможно. JFrame верхнего уровня управляется внешним видом операционной системы.
Вы МОЖЕТЕ изменить цвет 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);
Да, я нашел решение. Я думаю, что это может быть полезно для людей, которые видят это сейчас.
Использовать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);
Теперь я могу добиться этого:-
Я знаю, что немного опаздываю, но это может помочь другим:
Я обыскал весь Интернет, чтобы найти способ полностью изменить тему моего приложения на основе свинга. Затем я нашел статью об этом:
Кто-то может сказать:
Это невозможно и не контролируется ОС.
Если вы хотите получить доступ к строке заголовка, сначала у вас должен быть доступ к собственным библиотекам движка Java. К счастью, есть способ:
Первый шаг: JNA предоставляет программам Java легкий доступ к собственным общим библиотекам без написания чего-либо, кроме кода Java. Таким образом, вы можете использовать этот репозиторий для доступа к ним: JNA.
Scroll down to readme and find the downloadable library.
Некоторые элементы могут откладываться в зависимости от используемой вами платформы. Поэтому убедитесь, что вы используете
jna-platform-5.8.0.jar
чтобы ваше приложение было совместимо с любыми платформами.
Второй шаг: если вы не знаете, как использовать библиотеки JNA, вы можете использовать это в качестве примера: пример
в любом случае, это может решить вашу проблему с цветом строки заголовка;)
Основная статья: Внешняя ссылка
Help me improve my writing in English by telling me my mistakes :D
Я думаю, что цель состоит в том, чтобы добиться реального вида приложения на Win10. Поскольку невозможно реально изменить цвет заголовка окна, единственный способ - настроить окно.
Хотя примеры установки варианта Metal LAF дают хороший пример, я обнаружил, что эта проблема сложнее. Реальное окно Win10 должно иметь границу win10, прозрачную границу (тень), куда пользователь может перетащить для изменения размера. В заголовке должны использоваться значки Win10 и указатель мыши для кнопок окна.
Я f.setUndecorated(правда); и нарисуйте его самостоятельно, и установите вставки окна так, чтобы содержимое работало как обычно.
(Мелкий шрифт: хотя мы все "знаем", что можно настроить Swing с помощью LAF, в реальной жизни написание LAF всегда намного сложнее, чем просто создание подклассов и рисование собственных украшений. В качестве дополнительной проблемы архитектура LAF не выразить все свойства компонента, и "нативный" LAF довольно далек от нативного внешнего вида (например, проверьте выпадающий список win7) или ощущений (выпадающие списки не выдвигаются, выпадающие выпадающие окна win7 не имеют всплывающих окон, а кнопки -). не говоря уже об отсутствии Windows-подобных компонентов, таких как приличная лента Office 2016, или даже о простом "переключении" Win10. Действительно, вы не можете сделать слишком много, не заваривая свои собственные компоненты.)
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));