2013-01-10 11 views
5

Quello che voglio è rendere lo sfondo di un'area di testo non modificabile uguale al suo sfondo disabilitato.Come gestire il colore derivato in Nimbus Look and Feel?

So che il colore è disponibile dal UIManager con la chiave TextArea.disabled:

DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223 

ho innanzitutto provato:

textArea.setBackground(UIManager.getColor("TextArea.disabled")); 

ha cambiato nulla e lo sfondo era ancora bianca.

Poi ho provato:

textArea.setBackground(new Color(UIManager.getColor("TextArea.disabled").getRGB())); 

Lo sfondo ha fatto cambiare, ma non era esattamente lo stesso del fondo disabile che sembra più luminoso.

Qual è il modo corretto per gestire questo colore derivato?

+0

vedere Tutorial Oracle su aspetto e funzionalità, ignorare le chiavi appropriate per JTextArea – mKorbel

+0

Non esiste alcuna chiave per lo sfondo non modificabile. –

risposta

0

ho trovato la risposta. Il colore utilizzato per disabili sfondo non è UIManager.getColor("TextArea.disabled"), ma hardcoded in classe TextAreaPainter:

private Color color1 = decodeColor("nimbusBlueGrey", -0.015872955f, -0.07995863f, 0.15294117f, 0); 

Usando questo colore risolve il mio problema.

4

@Zhao Yi ha scritto Non v'è alcun tasto per lo sfondo non modificabile

enter image description here

codice per Java6, devono cambiare imports for Java7

import com.sun.java.swing.Painter; 
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.GridLayout; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 

public class TestNimbusUIManagerTextArea { 

    private static JFrame frame = new JFrame("Nimbus UIDeafaults"); 
    private JTextArea testEnableTextArea = new JTextArea("enabled JTextArea"); 
    private JTextArea testDisableTextArea = new JTextArea("disabled JTextArea"); 

    public TestNimbusUIManagerTextArea() { 
     testDisableTextArea.setEnabled(false); 
     frame.setLayout(new GridLayout(2, 0, 20, 20)); 
     frame.add(testEnableTextArea); 
     frame.add(testDisableTextArea); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocation(200, 105); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private static void customizeNimbusLaF() { 
     UIManager.getLookAndFeelDefaults().put(
       "TextArea[Enabled+NotInScrollPane].backgroundPainter", 
       new FillPainter(new Color(127, 255, 191))); 
     UIManager.getLookAndFeelDefaults().put(
       "TextArea[Disabled+NotInScrollPane].backgroundPainter", 
       new FillPainter(new Color(127, 255, 191))); 
     SwingUtilities.updateComponentTreeUI(frame); 
    } 

    public static void main(String arg[]) { 
     try { 
      for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        UIManager.setLookAndFeel(info.getClassName()); 
        customizeNimbusLaF();     
        break; 
       } 
      } 
     } catch (Exception e) { 
     } 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       TestNimbusUIManagerTextArea tNUIM = new TestNimbusUIManagerTextArea(); 
      } 
     }); 
    } 
} 

class FillPainter implements Painter<JComponent> { 

    private final Color color; 

    FillPainter(Color c) { 
     color = c; 
    } 

    @Override 
    public void paint(Graphics2D g, JComponent object, int width, int height) { 
     g.setColor(color); 
     g.fillRect(0, 0, width - 1, height - 1); 
    } 
} 
+0

Grazie per il codice, ma questo non è quello che voglio. Voglio solo rendere le aree di testo non modificabili (non disabilitate) con lo stesso sfondo del suo sfondo disabilitato (predefinito Nimbus). Inoltre, 'Painter' non è un'API pubblica, quindi non è una buona pratica personalizzare Nimbus come questo. –

+0

nel caso in cui si sia JTextArea.setEditable (false), quindi non è successo nulla, lo schema Colors rimane invariato, utilizzare (non per Nimbus) che per JTextComponent solo – mKorbel

+0

+1, Nimbus è più complicato di altri LAF. Sembra che ho bisogno di aggiornare UIManagerDefaults per includere la nuova sintassi Nimbus per le proprietà. – camickr

Problemi correlati