2011-09-08 14 views
5

Mam niestandardowy obiekt ListCellRenderer i chciałbym użyć domyślnego koloru backround wyboru Nimbus. Mogę wyszukiwania kolor z:Jak używać domyślnego koloru Nimbus z UIManager?

Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

i gdybym go wydrukować, to ma takie same wartości jak na Nimbus default colors. Ale kiedy używam go na JPanelu, otrzymuję inny szary kolor, jak mogę użyć koloru z UIManager?

Kiedy zrobić:

setBackground(Color.RED); 

backround JPanels jest wyświetlana na czerwono, ale kiedy zrobić:

setBackground(selectionBackground); 

W "selectionBackground" kolor jest nie używane, ale szary kolor .


Oto przykład i zrzut ekranu:

enter image description here

Tło powinno być:

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 

public class PanelColor { 

    public static void main(String[] args) { 

     // switch to Nimbus Look And Feel 
     for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       try { 
        UIManager.setLookAndFeel(info.getClassName()); 
       } catch (Exception e) { e.printStackTrace(); } 
       break; 
      } 
     } 

     Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setPreferredSize(new Dimension(300,50)); 
     panel.add(new JLabel(selectionBackground.toString()), BorderLayout.NORTH); 

     // is not showing the selectionBackground color 
     panel.setBackground(selectionBackground); 

     JFrame frame = new JFrame(); 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

Czy to możliwe, że następujące pytanie może ci pomóc w Nimbus - http://stackoverflow.com/questions/5840599/jbutton-background-on-nimbus-laf? –

+1

Wow, bardzo dziwne. Sprawdziłem kod: zwracany kolor jest typu javax.swing.plaf.ColorUIResource. Ale nie widzę, jak to może spowodować problem, ponieważ jest to podklasa koloru. W kodzie ColorUIResource nie ma nic szczególnego, nie ma odniesienia do interfejsu użytkownika ani nic takiego. Jak sugerował Joey, 'selectionBackground = new Color (selectionBackground.getRGB());' działa. – toto2

Odpowiedz

4

Nimbus podobno odporny że kolory są wykorzystywane w innym miejscu. Natknąłem się na to jeszcze chwilę temu i wtedy moim najlepszym rozwiązaniem było stworzenie nowego Color używając komponentów (możesz zapytać) i użyć tego. Oczywiście, pozostaniesz przy tym kolorze, nawet jeśli zmienisz L & F.

Wiem, że to jest cały punkt DerivedColor wracasz z UIManager. Jednak nie znalazłem lepszego rozwiązania.

To samo dotyczy innych L & F i innych rzeczy. Na przykład. GTK L & F z radością da ci ikony, które chcesz mieć, ale nie będą one korzystać z twoich własnych kontrolek. Sądzę, że częścią tego wszystkiego jest to, że Swing jest (a) okropnie złożony i (b) nie ma L & F, który faktycznie przestrzega kontraktów, nawet Nimbus, mimo że jest najnowszym i najfajniejszym.

+0

Gdzie jest zdefiniowany DerivedColor? Masz na myśli [NimbusLookAndFeel.getDerivedColor] (http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/NimbusLookAndFeel.html#getDerivedColor%28java.lang.String,%20float,%20float,%20float, % 20int,% 20boolean% 29)? – Gili

5

Nie sądzę, że Nimbus "opiera się" ustawianiu koloru. Błędnie zakłada, że ​​nie zastąpiłeś domyślnego, ponieważ UIManager.getColor() zwraca instancję ColorUIResource.

ColorUIResource to po prostu kolor, który implementuje interfejs znaczników UIResource. Zgodnie z Javadoc, L & Fs "użyj tego interfejsu, aby zdecydować, czy wartość właściwości została nadpisana". Nimbus sprawdza kolor tła, zauważył, że go nie przesłoniłeś i wycofuje się z pewnych wewnętrznych zachowań, których się nie spodziewasz.

Powiązane problemy