# JTextPane Background setzen



## jal1976 (6. Feb 2011)

Hallo zusammen,
ich habe eine erweiterte JTextPane.
Nun wollte ich der JTextPane eine andere Farbe als Background setzen. Die Methode setBackground(Color c); gibt es ja. Aber wenn ich dort eine neue Farbe angebe ändert sich nix. Die Hintergrundfarbe des JTextPanes bleibt weiß.
Hat jemand von euch eine Idee?
bin für jeden Tip dankbar...

habe schon bei google und hier im Forum geschaut, leider nix gefunden...

lg


----------



## Enigma228 (7. Feb 2011)

Hmm.. ich habe es eben noch mal getestet.. bei mir funktioniert der Wechsel ohne Probleme.. also wird es wohl an deinem Code liegen.. also sende mal bitte deinen Code!!


----------



## jal1976 (7. Feb 2011)

Hier mal meine Klasse die von JTextPane erbt:


```
import javax.swing.*;
import javax.swing.text.*;
import de.jal.moviecollector.language.LanguageConstants;


public class MovieInfoJTextPane extends JTextPane
{
	private static final long serialVersionUID = 1L;
	private final String newLine = "\n", regular = "regular", bold = "bold";
	private final String[] constantText = { LanguageConstants.getValue("NAME_MOVIE")+this.newLine,
								LanguageConstants.getValue("DIRECTOR")+this.newLine,
								LanguageConstants.getValue("ACTORS")+this.newLine,
								LanguageConstants.getValue("RELEASE_YEAR")+this.newLine,
								LanguageConstants.getValue("OWN_INFO")+this.newLine
							};
	private final int textSize = 13;
	private StyledDocument doc;
	
	/**
	 * 
	 */
	public MovieInfoJTextPane()
	{
		this.init();
	}
	
	/**
	 * 
	 */
	private void init()
	{
                this.setBackground(Color.LIGHT_GRAY);
		this.setEditable(false);
		this.doc = this.getStyledDocument();
		this.addStylesToDocument(this.doc);
		this.setDefaultValues();
	}
	
	/**
	 * 
	 */
	public void setDefaultValues()
	{
		try
		{
			this.doc.remove(0, this.doc.getLength());
            for(int i=0; i<this.constantText.length; i++)
            {
            	this.doc.insertString(this.doc.getLength(), this.constantText[i],
            														this.doc.getStyle(this.bold));
            	this.doc.insertString(this.doc.getLength(), this.newLine,
            													this.doc.getStyle(this.regular));
            }
        }
		catch (BadLocationException ble)
		{
            ble.printStackTrace();
        }
	}
	
	/**
	 * 
	 */
	private void addStylesToDocument(StyledDocument _doc)
	{
		Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
		
		Style regular = _doc.addStyle(this.regular, def);
		StyleConstants.setForeground(regular, Main_Default.INFO_TEXTPANE_COLOR);
		
        StyleConstants.setFontFamily(def, "SansSerif");
        
        Style s = _doc.addStyle(this.bold, def);
        StyleConstants.setBold(s, true);
        StyleConstants.setFontSize(s, this.textSize);
        StyleConstants.setUnderline(s, true);
	}
}
```

Ich erzeuge das JTextPane dann nur:


```
MovieInfoJTextPane textPane = new MovieInfoJTextPane();
```

Wenn ich die Hintergrundfarbe erst nach dem Erzeugen der Instanz setze, dasselbe Spiel... Der hintergrund der JTextPane bleibt weiss.

Achso, das einzige was ich noch mache ist, die JTextPane in eine JScrollPane adden. Also in den ViewportView der JScrollPane.

lg


----------



## Enigma228 (7. Feb 2011)

Wie genau addest du die Textpane zur Scrollpane..

ich habe es mal so gemacht und es läuft:


```
MyTextPane p = new MyTextPane();
p.setText("H A L L O\n\n\n\n\n\n\n\n\n\nTest");
JScrollPane sp = new JScrollPane(p);
sp.setPreferredSize(new Dimension(100, 100));
```

MyTextPane enstpricht deiner Klasse aber ich musste einiges rausnehmen, da ich deine anderen Klassen nicht habe

```
import java.awt.Color;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;


public class MyTextPane extends JTextPane {

	public MyTextPane() {
		init();
	}

	private static final long serialVersionUID = 1L;
    private final String newLine = "\n", regular = "regular", bold = "bold";
    /*private final String[] constantText = { LanguageConstants.getValue("NAME_MOVIE")+this.newLine,
                                LanguageConstants.getValue("DIRECTOR")+this.newLine,
                                LanguageConstants.getValue("ACTORS")+this.newLine,
                                LanguageConstants.getValue("RELEASE_YEAR")+this.newLine,
                                LanguageConstants.getValue("OWN_INFO")+this.newLine
                            };*/
    private final int textSize = 13;
    private StyledDocument doc;
    
    
    private void init()
    {
                this.setBackground(Color.LIGHT_GRAY);
        this.setEditable(false);
        this.doc = this.getStyledDocument();
        this.addStylesToDocument(this.doc);
        //this.setDefaultValues();
    }
    
    /*public void setDefaultValues()
    {
        try
        {
            this.doc.remove(0, this.doc.getLength());
            for(int i=0; i<this.constantText.length; i++)
            {
                this.doc.insertString(this.doc.getLength(), this.constantText[i],
                                                                    this.doc.getStyle(this.bold));
                this.doc.insertString(this.doc.getLength(), this.newLine,
                                                                this.doc.getStyle(this.regular));
            }
        }
        catch (BadLocationException ble)
        {
            ble.printStackTrace();
        }
    }*/
    
    private void addStylesToDocument(StyledDocument _doc)
    {
        Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
        
        Style regular = _doc.addStyle(this.regular, def);
        //StyleConstants.setForeground(regular, Main_Default.INFO_TEXTPANE_COLOR);
        
        StyleConstants.setFontFamily(def, "SansSerif");
        
        Style s = _doc.addStyle(this.bold, def);
        StyleConstants.setBold(s, true);
        StyleConstants.setFontSize(s, this.textSize);
        StyleConstants.setUnderline(s, true);
    }

}
```


----------



## jal1976 (7. Feb 2011)

Ich weiss jetzt woran es liegt... (wenigstens schonmal etwas).

Es liegt am Nimbus LookAndFeel.
Wenn ich das LookAndFeel auf getSystemLookAndFeel() umstelle (Ich habe WIndows 7), dann funktioniert das mit dem setBackground();
Unter Nimbus nicht... 
Mann, was für'n Blödsinn...
Hat da jemand eine Idee wie man das unter Nimbus bewerkstelligen kann??

vg


----------



## Enigma228 (7. Feb 2011)

Bloss ne Idee!! Da ich kein Windows 7 habe, kann ich es nicht testen..


```
meintextpane.setOpaque(true);
```


----------



## jal1976 (14. Feb 2011)

@Enigma du hats recht.
Ich habe auch schon geahnt das es am setOpaque liegt...
Für diejenigen die dasselbe Problem haben:

ich hab mal ein wenig gegoogelt und dieses hier gefunden

Nimbus Look&Feel und seine Eigenarten  SolutionCrawler

Kinderkrankheiten vom Nimbus, denke ich.
Aber jetzt funktioniert es einwandfrei...


----------

