我正在嘗試使用Java中的UIManager來使所有彈出的GUI和錯誤GUI使用相同的顏色。問題是,我似乎無法改變使用Windows風格時的按鈕顏色,以及我無法設法更改圖形用戶界面標題欄。Java Windows UIManager
代碼:它相當簡單,我打電話UIManager.getLookAndFeelDefaults()把( 「Button.background」,buttonColor)安達其他一些用戶界面的變化。沒什麼大事......
我正在嘗試使用Java中的UIManager來使所有彈出的GUI和錯誤GUI使用相同的顏色。問題是,我似乎無法改變使用Windows風格時的按鈕顏色,以及我無法設法更改圖形用戶界面標題欄。Java Windows UIManager
代碼:它相當簡單,我打電話UIManager.getLookAndFeelDefaults()把( 「Button.background」,buttonColor)安達其他一些用戶界面的變化。沒什麼大事......
如果使用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,並設置你想要的按鈕的特性。
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的一些值的代碼,它看起來工作得很好。也許,你可以做一些小的修改來調整它,但基礎應該很好。
我創建JOptionPane s以相同的方式,這裏是我的UI代碼https: //gist.github.com/DarkGuardsman/9820dedcfd6dbdfbd4138bf0df3007b9其餘的都是封閉源碼,所以我不能分享一切。不過,我認爲這是一個副作用,因爲我現在正在接受其他奇怪的錯誤。例如JPanels不會變成透明的。 – DarkGuardsman
默認的金屬外觀看起來很糟糕,這與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
:對於如何處理所有這些UIManager段有點奇怪,您會期望它們之間達到某種程度的一致性。以及改變顏色等基本功能。至於nimbus,它不是我在用戶界面中尋找的東西,而是它改變了其他GUI的所有視覺效果。另外,我需要更改我所有的密鑰條目,因爲我聽說靈巧鍵不同。感謝您的幫助,您的意見非常有用 – DarkGuardsman
爲什麼要創建一個新的UIManger實例?此外,我sorta致力於實現我自己的對話框,以防萬一我無法讓UIManager正常工作。 – DarkGuardsman
如果您使用自己的對話框,則不需要UImanager實例。 – Sirsendu
雅,但UIManager確實簡化了過程,如果我能得到它的工作:) – DarkGuardsman