2016-01-08 4 views
0

J'ai un JTextPane qui a pane.setEditable(false) qui l'oblige à avoir une couleur de fond «grisée».Comment puis-je modifier la couleur d'arrière-plan d'un JTextPane non modifiable en Java?

Après avoir essayé setBackground(Color.WHITE) (ce qui ne fonctionne pas), j'ai essayé de chercher une réponse sur le net mais je n'ai pas réussi à en trouver un pour le moment.

Quelqu'un peut-il m'aider sur celui-ci s'il vous plaît?

+1

Pouvez-vous s'il vous plaît poster un [Runnable Exemple] (http://stackoverflow.com/help/mcve) que nous pouvons copier-coller et voir le même question comme vous? – Frakcool

+0

Je suggère de vérifier [this] (https://community.oracle.com/thread/1480217?start=0&tstart=0) lien. J'espère qu'il répondra à votre question – Jonah

+1

@Frakcool merci, j'ai commencé à écrire un exemple Runnable et j'ai trouvé la réponse au problème en le faisant. J'avais 'pane.setOpaque (false)' qui m'empêchait de changer toutes les couleurs sur le volet. Merci pour l'aide. Désolé, j'apprends encore beaucoup sur Java! – blueprintChris

Répondre

1

J'ai découvert ce que c'était - c'était parce que j'avais pane.setOpaque(false), je ne pouvais pas changer la couleur d'arrière-plan sans d'abord enlever ceci ou le changer en vrai.

setBackground(Color.white) travaillé après avoir modifié cela.

+1

La couleur de fond est différente de quelle couleur pour indiquer la désactivation d'un composant, j'ai pensé que c'est ce que vous vouliez à l'origine. – SomeDude

+0

Je crois que 'setEnabled' et' setEditable' sont deux choses différentes. Je me renseignais sur 'setEditable'. Je garderai votre réponse à l'esprit si je dois modifier la couleur des composants avec 'setEnabled (false)'. Merci – blueprintChris

+0

Ok, j'ai compris. Vous ne voyez pas que vous avez utilisé setEditable. – SomeDude

2

essayer En fait celui-ci:

UIManager.put("TextPane.disabledBackground", Color.WHITE); 

Je pense qu'il devrait être TextPane.disabledBackground, sinon essayer: TextPane.inactiveBackground

Pour modifier le texte en arrière couleur de fond, je crois: Essayez setDisabledTextColor sur le volet.

+0

Merci pour l'entrée - mais le problème est que j'avais été 'pane.setOpqaue (false)' m'empêchait de changer n'importe quelle couleur. – blueprintChris

1

Notez que pour certains aspects esthétiques et fonctionnels comme Nimbus qui ne respectent pas la propriété d'arrière-plan, vous pouvez utiliser ce code:

private static class Painter extends javax.swing.plaf.nimbus.AbstractRegionPainter { 
    private final Color color; 

    private Painter(Color color) { 
     this.color = color; 
    } 
    @Override 
    protected AbstractRegionPainter.PaintContext getPaintContext() { 
     return new AbstractRegionPainter.PaintContext(null, null, false); 
    } 

    @Override 
    protected void doPaint(Graphics2D g, JComponent c, 
      int width, int height, Object[] extendedCacheKeys) { 
     g.setColor(c.isEnabled() ? c.getBackground() : color); 
     g.fillRect(0, 0, width, height); 
    } 
} 

Ceci définit un nouveau peintre personnalisé pour l'arrière-plan. Pour Nimbus, l'appliquer à votre JTextPane jtp cette façon:

 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); 
     Painter painter = new Painter(color); 
     String key = "TextPane[Disabled].backgroundPainter"; 
     defaults.put(key, painter); 
     jtp.putClientProperty("Nimbus.Overrides", defaults); 
     jtp.putClientProperty("Nimbus.Overrides.InheritDefaults", false);