2009-11-02 2 views
8

Ich möchte das ausgewählte Symbol für eine JCheckbox zu einem anderen Symbol ändern, sagen wir zum Beispiel das deaktivierte ausgewählte Symbol für eine JCheckbox. Wie kann ich das deaktivierte ausgewählte Symbol vom UIManager abrufen?Auf Look-and-Feel-Standardsymbole zugreifen?

Ich habe versucht UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); Ist das der falsche Name der Icon-Eigenschaft oder ist das nur der falsche Weg, um zu dieser Ressource zu gelangen?

Antwort

3

Blick durch den Code für AbstractButton, scheint es, dass die von den disabledSelectedIconselectedIcon abgeleitet wird, es sei denn, es auf dem Abstract (oder JCheckBox in diesem Fall) durch setDisabledSelectedIcon angegeben ist. Wenn dies der Fall ist, gibt das Aufrufen von UIManager.getIcon ("...") das Objekt, nach dem Sie suchen, nicht zurück.

EDIT:

Beachten Sie, dass ein JCheckBox ein icon Feld hat, wie in dem AbstractButton API definiert, ebenso wie ein JButton ein Symbol haben kann. Es ist ein Bild, das neben dem Text angezeigt wird und nicht mit dem Kästchensymbol "markiert" oder "nicht markiert" übereinstimmt, auf das Sie sich beziehen.

Das Häkchen/Entaktivieren-Symbol wird von einer einzelnen Klasse behandelt, die mit UIManager.getObject('CheckBox.icon') gefunden wurde. Es ist eine Unterklasse Icon und behandelt sowohl das Markieren des aktivierten als auch des deaktivierten Status. Sie können Beispiele davon in den verschiedenen [L&F name]IconFactory Klassen sehen.

+1

Nachgefragt für selectedIcon, CheckBox.selectedIcon oder CheckBoxUI.selectedIcon, alle Rückkehr null. –

+0

Ihre Antwort hat mich inspiriert, tiefer ins Synth-Paket zu gehen, um herauszufinden, wie das Standardsymbol konvertiert wurde. Vielen Dank. –

8

Anscheinend gibt es nicht standardmäßig eine. Zumindest nicht, wenn ich versuche, es anzurufen.

Dumping Nur die Schlüssel von UIManager.getLookAndFeelDefaults().keys() folgenden erzeugt, wenn der Schlüssel CheckBox enthält:

CheckBox.foreground 
CheckBox.border 
CheckBox.totalInsets 
CheckBox.background 
CheckBox.disabledText 
CheckBox.margin 
CheckBox.rollover 
CheckBox.font 
CheckBox.gradient 
CheckBox.focus 
CheckBox.icon 
CheckBox.focusInputMap 

Nach akf's answer lesen, begann ich in den plaf.synth Paketen durch den UIManager Code zu graben und fand Anrufe, die im Wesentlichen delegieren null disableCheckedIcon an die Look & Feel-Klassen, um zu versuchen, die Standard-ICON in eine graue Version zu konvertieren. So landete ich mit auf den Punkt:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon"); 
Icon dsiabledCheckedIcon = 
    UIManager.getLookAndFeel(). 
     getDisabledSelectedIcon(new JCheckBox(), checkedIcon);