2016-07-30 58 views
0

我正在嘗試使用Java中的UIManager來使所有彈出的GUI和錯誤GUI使用相同的顏色。問題是,我似乎無法改變使用Windows風格時的按鈕顏色,以及我無法設法更改圖形用戶界面標題欄。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);

若要恢復的對話框 -

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實例?此外,我sorta致力於實現我自己的對話框,以防萬一我無法讓UIManager正常工作。 – DarkGuardsman

+1

如果您使用自己的對話框,則不需要UImanager實例。 – Sirsendu

+0

雅,但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); 
    } 
} 

對於標題中的白色背景,你有一個顏色(白色),所以它似乎工作。也許,這是一個關鍵價值的問題。 如果你想讓我們更好地理解,請點擊它。

編輯

看到你的代碼後,我明白你的問題。這是使用的外觀和感覺。 您不使用默認外觀(金屬)。
也許,你不知道,但所有在Swing中的外觀和感覺都不是平等的。
事實上,一些外觀和感覺支持一些選項和混合選項,但不受其他外觀和感覺的支持。
如果使用默認外觀,則應該具有較少的兼容性問題。
知道是否正確支持,最好的辦法是向一些官方文檔報告,但它是真實的,有很多關於它的信息是乾的,有錯誤的,並沒有詳細的

在您在您的評論發佈的鏈接: 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。 Nimbus document
它的問世以來,Java SE 6的更新10

我同意你的看法,金屬是醜陋的。但爲什麼不使用靈氣而不是窗戶LAF?這很棒。我試過用Nimbus修改lAF的一些值的代碼,它看起來工作得很好。也許,你可以做一些小的修改來調整它,但基礎應該很好。

+0

我創建JOptionPane s以相同的方式,這裏是我的UI代碼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