2016-07-30 10 views
0

Я пытаюсь использовать UIManager в java, чтобы все мои всплывающие графические интерфейсы и графические интерфейсы ошибок использовали одни и те же цвета. Проблема в том, что я не могу изменить цвет кнопки при использовании стиля Windows, а также не могу изменить панель заголовков GUI.Java Windows UIManager

enter image description here

Код:. Его довольно просто, я звоню UIManager.getLookAndFeelDefaults() ставить ("Button.background", buttonColor) Анда несколько других изменений пользовательского интерфейса. Ничего серьезного ...

ответ

1

Если вы используете JOptionPane,

Вам изменить название, используя этот формат, чтобы использовать свой собственный заголовок.

JOptionPane.showMessageDialog(null, "This is the message", "This is the title", JOptionPane.YES_NO_OPTION);

Чтобы установить обратно землю цвет dialog-

UIManager UI=new UIManager(); 
UI.put("OptionPane.background", Color.white); 
UI.put("Panel.background", Color.white); 
JOptionPane.showMessageDialog(null,"Text","SetColor",JOptionPane.YES_NO_OPTION); 

Для изменения кнопок в диалоговом окне или все остальное, создать свой собственный JDialog и установить кнопки характеристик, которые вы хотите.

+0

Зачем нужен новый экземпляр UIManger? Также я сортирую работу над реализацией собственных диалогов в случае, если я не могу заставить UIManager работать правильно. – DarkGuardsman

+1

Если вы используете собственный диалог, экземпляр UImanager не требуется. – Sirsendu

+0

Ya, но UIManager очень упрощает процесс, если я могу заставить его работать :) – DarkGuardsman

2

UIManager.getLookAndFeelDefaults(). Положить ("Button.background", buttonColor)

Для цвета кнопок из JOptionPane диалогов я не понимаю, почему он не работает. Должно. Может быть, побочный эффект. Мы не видим весь ваш код.
Попробуйте этот простой код, вы должны увидеть только зеленые кнопки.

package swing.uimanager; 

import java.awt.Color; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.UIDefaults; 
import javax.swing.UIManager; 

public class JFrameWithUIManger extends JFrame { 

    public static void main(String[] args) { 
     new JFrameWithUIManger(); 
    } 

    public JFrameWithUIManger() { 
     final UIDefaults lookAndFeelDefaults = UIManager.getLookAndFeelDefaults(); 
     lookAndFeelDefaults.put("Button.background", Color.GREEN); 

     add(new JButton("A button")); 
     pack(); 
     setVisible(true); 
     JOptionPane.showMessageDialog(this, "hello I am a message dialog"); 
     JOptionPane.showConfirmDialog(this, "hello I am a question dialog", "do you like me ?", JOptionPane.YES_NO_OPTION); 
    } 
} 

Для белого фона в заголовке у вас есть цвет (белый), поэтому он работает. Может быть, проблема в ключевой ценности. Отправьте его, пожалуйста, если вы хотите, чтобы мы поняли лучше.

Редактировать

После просмотра вам код, я понял вашу проблему. Это внешний вид. Вы не используете внешний вид по умолчанию (металл).
Возможно, вы не знаете, но все взгляды и чувства в Свинге не рождаются равными.
На самом деле, некоторые варианты и варианты смешивания поддерживаются некоторыми взглядами и ощущениями, но не поддерживаются другим внешним видом и ощущениями.
Если вы используете внешний вид по умолчанию, у вас должно быть меньше проблем с совместимостью.
Лучший способ узнать, если он правильно поддерживается, чтобы сообщить некоторые официальные документы, но это правда, что много информации о нем высохнет, с ошибками, а не подробный

В ссылке вы публикуемая в своем комментарии: http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button, клавиши, отображаемые в таблицах, не означают, что значения присутствуют или могут быть изменены, но только ключи присутствуют в LAF.
Каждый LAF несет ответственность за принятие или отсутствие ключа и возможность изменять значения, связанные с ключами.

Я попытался с помощью Windows LAF установить только кнопку цвет фона, это тоже не сработает. Таким образом, это не похоже на побочный эффект, но похоже, что больше нет поддержки этой функции для Windows LAF.

В любом случае, вы можете заинтересовать Нимбус, если хотите официальный, приятный и более свежий и более гибкий внешний вид, чем классический металлический внешний вид. Nimbus document
Она доступна с 6 Update Java SE 10.

Я согласен с вами, Metal некрасиво. Но почему бы не использовать nimbus вместо окон LAF? Здорово. Я пробовал ваш код, который изменяет некоторые значения lAF с помощью Nimbus, кажется, что он работает красиво. Может быть, вы могли бы внести некоторые незначительные изменения, чтобы настроить его, но основа должна быть приятной.

+0

Я создаю JOptionPane s таким же образом, и вот мой код пользовательского интерфейса https: //gist.github.com/DarkGuardsman/9820dedcfd6dbdfbd4138bf0df3007b9 остальное закрыто, поэтому я не могу все разделить. Тем не менее, я действительно думаю, что это побочный эффект, так как теперь я получаю другие нечетные ошибки. Например, JPanels, которые не станут прозрачными. – DarkGuardsman

+0

Металлический внешний вид по умолчанию визуально плох, что-то похожее на графики Windows 2000. Именно поэтому я использовал стиль Windows, который, как утверждают некоторые документы, поддерживает изменение цветов фона. Кроме того, изменение металлического внешнего вида изменяет размеры моих кнопок намного меньше. http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button – DarkGuardsman

+0

:/бит нечетный относительно того, как обрабатываются все эти сегменты UIManager, вы ожидаете некоторую степень согласованности между ними. Кроме того, базовые функции, такие как смена цветов. Что касается nimbus, то это не то, что я ищу в пользовательском интерфейсе, и это слишком сильно изменяет все визуальные эффекты остальных GUI. Кроме того, мне нужно было бы изменить все мои ключевые записи, поскольку я слышал, что клавиши нимба отличаются. Спасибо за помощь, ваши комментарии были полезны – DarkGuardsman