Изменение цвета заголовка панели в Java Swing - PullRequest
6 голосов
/ 27 ноября 2011

Я запускаю приложение Swing на Win7, используя монитор с плоским экраном 144 dpi. Названия моих рамок, панели параметров и т. Д. Отображаются белым цветом на прозрачном фоне (Aero?). Мне вообще нравится Aero, но белые заголовки очень трудно читать! Я просмотрел все свойства UIManager, о которых могу только подумать, и ни одно из них, похоже, не имеет никакого эффекта. Есть ли уровень ниже UIManager, к которому я могу добраться - и желательно вносить изменения один раз для моего приложения, так как я не хочу добавлять код для каждого отдельного вызова панели параметров. Может быть, я упускаю что-то очень простое ... но помощь была бы оценена!

Я бы тоже хотел изменить заголовочные шрифты, но это не так срочно!

Кроме того, кстати, вы делаете вызовы UIManager.put до или после настройки внешнего вида? Или это не имеет значения?


Дополнительная информация: я изменил свою персонализацию Win7 на использование темы Aero под названием Canada, и теперь названия выделены черным цветом с использованием разумного шрифта. Так что мой вопрос становится:

Как атрибуты UIManager связаны с темами Win7, и, учитывая, что я не могу предсказать, какие пользователи темы будут использовать, как я могу контролировать внешний вид заголовка панели?


Я собираюсь поставить этот вопрос по-другому: почему я не могу изменить цвет каждого пикселя на панели дисплея моего приложения? Есть ли уровень ниже UIManager, который, кажется, очень ограничен в том, что вы можете изменять ...?

Ответы [ 4 ]

5 голосов
/ 27 ноября 2011

Этот способ будет немного сложнее, но если вам нужен собственный Контейнер с полным контролем,

1) создать Un_decorated JFrame / JDialog

2) на севере вы можете поставить JPanel с GradientPaint тем имитирующим контейнером, который пришел из Win7

3) и положите 3 JButtons с иконкой на JPanel с GradientPaint

4) добавить требуемые события в JButtons, и для более приятного вывода в GUI следует установить JButtons#setContentAreaFilled(false)

3 голосов
/ 27 ноября 2011

Используйте метод setUndecorated(false), чтобы отключить оформление окон на платформе хоста.

Ниже приведен пример этого, хотя он предназначен для платформы Mac OS, он может предоставить вам отправную точку. Перекрасить на полупрозрачную раму / панель / компонент.

1 голос
/ 10 декабря 2011

Возможно этот урок поможет;он объясняет, как изменить внешний вид украшения JFrame.Он также имеет демонстрационную программу, чтобы вы могли изучить различия.

По умолчанию внешний вид оформления JFrame управляется операционной системой, поскольку таким образом приложения лучше сочетаются с общим внешним видом иощущение платформы, которую вы используете.Но вы можете изменить это и контролировать это сами;нет необходимости удалять украшения и «подделывать» их в рамке.

Недостатком является то, что если вы сами настраиваете внешний вид украшений, а не позволяете ОС делать это, вам, возможно, придетсяПодумайте, какой внешний вид и стиль использовать, чтобы ваше окно не конфликтовало с какой-либо платформой, с которой может запускаться приложение.

0 голосов
/ 09 декабря 2011

Если вы хотите управлять оконными декораторами, тогда используйте JFrame.setDefaultLookAndFeelDecorated (boolean) .Установите для этого параметра значение true, затем настройте свой стиль и внешний вид.

Чтобы увидеть эту работу для вас, сначала установите декораторы (как указано выше), затем выберите способ более удобного использования (хотя он и выглядит).может быть уродливым), например Металл: Сталь или Металл: Океан:

java -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel -Dswing.metalTheme=steel MyApp.jar

или

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

Убедившись, что это именно то, что вы хотите, вы можете вернуться и изменитьвнешний вид или его цветовая палитра.

...