2016-07-30 14 views
0

Ich versuche, den UIManager in Java zu verwenden, damit alle meine Popup-GUIs und Fehler-GUIs die gleichen Farben verwenden. Das Problem ist, dass ich die Tastenfarbe nicht ändern kann, wenn ich den Windows-Stil verwende, und auch die Titelleiste der GUIs nicht ändern kann.Java Windows UIManager

enter image description here

Code:. Seine ziemlich einfach, ich rufe UIManager.getLookAndFeelDefaults() setzen ("Button.background", button) undeinem paar andere Änderungen an der Benutzeroberfläche. Nichts Besonderes ...

Antwort

1

Wenn Sie JOptionPane verwenden,

Sie eine Änderung der Titel in diesem Format einen eigenen Titel zu verwenden.

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

Zur Grundfarbe der 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); 

Bei Schaltflächen im Dialog oder alles zu ändern sonst, erstellen Sie Ihre eigenen JDialog zurückgesetzt und die Schaltfläche Eigenschaften festlegen, die Sie wollen.

+0

Warum eine neue UIManger-Instanz erstellen? Außerdem arbeite ich an der Implementierung meiner eigenen Dialoge für den Fall, dass ich den UIManager nicht richtig arbeiten lassen kann. – DarkGuardsman

+1

Falls Sie einen eigenen Dialog verwenden, ist die UImanager-Instanz nicht erforderlich. – Sirsendu

+0

Ya, aber UIManager vereinfacht den Prozess sehr, wenn ich es funktioniere :) – DarkGuardsman

2

UIManager.getLookAndFeelDefaults(). Setzen ("Button.background", button)

Für die Farbe der Tasten von JOptionPane Dialoge Ich verstehe nicht, warum es nicht funktioniert. Es sollte. Vielleicht ein Nebeneffekt. Wir sehen nicht Ihren gesamten Code.
Versuchen Sie diesen einfachen Code, Sie sollten nur grüne Tasten sehen.

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); 
    } 
} 

Für den weißen Hintergrund in dem Titel, haben Sie eine Farbe (weiß), so scheint es zu funktionieren. Vielleicht ein Problem in einem Schlüsselwert. Post es bitte, wenn Sie möchten, verstehen wir besser.

bearbeiten

Nachdem Sie Code zu sehen, habe ich verstanden, Ihr Problem. Es ist das Aussehen und Gefühl verwendet. Sie verwenden nicht das Standard-Look and Feel (Metall).
Wahrscheinlich wissen Sie nicht, aber all das Aussehen und Gefühl in Swing nicht gleich geboren.
In der Tat, einige Optionen und Mix-Optionen werden durch einige Look and Feel unterstützt, werden aber nicht von anderen Look and Feel unterstützt.
Wenn Sie das Standard-Look and Feel verwenden, sollten Sie weniger Kompatibilitätsprobleme haben.
Der beste Weg, zu wissen, ob es richtig wahr unterstützt wird, ist auf einige offiziellen Dokumente zu berichten, aber es ist, dass eine Menge Informationen über sie trocken ist, mit Fehlern und detaillierte nicht

In dem Link, der Sie in Ihrem Kommentar gepostet: http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button, bedeuten die in den Tabellen angezeigten Schlüssel nicht, dass Werte vorhanden oder modifizierbar sind, sondern dass nur die Schlüssel in der LAF vorhanden sind.
Jeder LAF ist dafür verantwortlich, den Schlüssel und die Möglichkeit, die mit den Schlüsseln verbundenen Werte zu ändern, zu berücksichtigen oder nicht.

Ich habe versucht, mit dem Windows LAF nur die Hintergrundfarbe Schaltfläche, funktioniert es auch nicht. Es scheint also kein Nebeneffekt zu sein, aber es scheint, als ob es an Unterstützung für dieses Feature für den Windows LAF fehlt.

Wie auch immer, Sie können Interesse am Nimbus haben, wenn Sie ein offizielles, schönes und neueres und flexibleres Aussehen und Gefühl als das klassische Metall Aussehen und Gefühl wollen. Nimbus document
Es seit der Java SE 6 Update verfügbar ist 10.

Ich stimme Ihnen zu, ist Metall hässlich. Aber warum nicht Nimbus anstelle der Fenster LAF verwenden? Es ist großartig. Ich habe versucht, Ihren Code, der einige Werte von IAF mit Nimbus ändert, es scheint gut zu funktionieren. Vielleicht könntest du ein paar kleine Änderungen vornehmen, aber die Basis sollte gut sein.

+0

Ich erstelle die JOptionPane s auf die gleiche Weise und hier ist mein UI-Code https: //gist.github.com/DarkGuardsman/9820dedcfd6dbdfbd4138bf0df3007b9 der Rest ist Closed Source, also kann ich nicht alles teilen. Ich denke jedoch, dass es ein Nebeneffekt ist, da ich jetzt andere seltsame Fehler bekomme. Zum Beispiel JPanels, die nicht transparent werden. – DarkGuardsman

+0

Das Standard-Look & Feel aus Metall ist visuell schlecht, etwas in der Art von Windows 2000-Grafik. Deshalb habe ich den Windows-Stil benutzt, der laut einigen Dokumenten unterstützt, die Hintergrundfarben zu ändern. Das Ändern des Metall-Looks und des Feelings verändert meine Tasten, um viel kleiner zu sein. http://nadeausoftware.com/articles/2008/11/all_ui_defaults_names_common_java_look_and_feels_windows_mac_os_x_and_linux#Button – DarkGuardsman

+0

:/Bit seltsam auf, wie alle diese UIManager Segmente behandelt werden, würden Sie ein gewisses Maß an Konsistenz zwischen ihnen erwarten. Sowie grundlegende Funktionalität wie Farbwechsel. Was Nimbus angeht, ist es nicht das, wonach ich in einer Benutzeroberfläche suche, und es verändert die Grafik aller anderen GUIs zu sehr. Außerdem müsste ich alle meine Tasteneinträge ändern, da ich gehört habe, dass Nimbus-Tasten anders sind. Danke für die Hilfe, Ihre Kommentare waren nützlich – DarkGuardsman