# JPanel und Hintergrundfarbe



## usuff (23. Mrz 2008)

hi,

ich verwende 2 JPanels für die GUI eines Schachbretts.

das eine panel soll ausschließlich das spielfeld mit randbeschriftungen enthalten und dann einem anderen panel, das die gesamte sichtbare Fläche(sprich die komplette GUI)aufnehmen soll hinzugefügt werden.

mein spielfeld mit randbeschriftung wird auch alles gezeichnet, nur kann ich die hintergrundfarbe meines spielfeldes nicht ändern. Die hintergrundfarbe wird scheinbar fest von dem panel vorgegeben, dass mein spielfeld aufnimmt. woran liegt das:

hier mal der komplette code


```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Schachbrett extends JPanel
{
private JFrame frame;
private JPanel visualArea;
final private int feldSize = 70;
final private int textSpace = 50;

public Schachbrett()
{
	frame = new JFrame("Schachbrett");
	frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
	frame.setSize(1024,768);
	frame.setPreferredSize(frame.getSize());
	frame.setLocationRelativeTo(null);
	frame.setResizable(false);
	
	this.setSize((feldSize*8+1)+ textSpace, (feldSize*8+1) + textSpace);
	this.setPreferredSize(new Dimension((feldSize*8+1)+ textSpace, (feldSize*8+1)+ textSpace));
	this.setBackground(new Color(255,23,132));
	this.setOpaque(false);
	
	visualArea = new JPanel();
	visualArea.setSize(new Dimension(frame.getSize()));
	visualArea.setPreferredSize(new Dimension(frame.getSize()));
	visualArea.setLayout(new BorderLayout());
	visualArea.setBackground(Color.green);
	visualArea.add(this, BorderLayout.EAST);

	frame.getContentPane().add(visualArea);
	frame.pack();
	frame.setVisible(true);

}

protected void paintComponent(Graphics g)
{

// Spielfeld zeichnen
	for(int i=0; i < 8; i++)
		for(int j=0; j < 8; j++)
		{
			g.drawRect((textSpace+ (feldSize*i)),
					0 + (feldSize*j),
			feldSize, feldSize);
			
			if (i % 2 == 0 ^ j % 2 == 0)
			g.setColor(Color.gray);
			else
			g.setColor(Color.white);
			
			g.fillRect(textSpace + (feldSize*i),
					0 + (feldSize*j), feldSize, feldSize);
		}
	
	//Gitternetz nachträglich zeichnen
	g.setColor(Color.black);
	
	for(int i=0; i < 8; i++)
		for(int j=0; j < 8; j++)
		{
			g.drawRect((textSpace + (feldSize*i)),
					0 + (feldSize*j),
			feldSize, feldSize);
		}
	
	// Horizontale Spielfeldbeschriftung
	char []letter ={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
	// Vertikale Spielfeldbeschriftung
	char []digits ={'1', '2', '3', '4', '5', '6', '7', '8'};
	
	for(int i=0; i < 8; i++)
	{
		g.drawChars(letter,i, 1, textSpace + (feldSize/2) + (feldSize *i), feldSize *8 + 20);
		g.drawChars(digits, i, 1, 20, feldSize/2 + feldSize*i);
	}
	
}

	public static void main(String []args)
	{
		new Schachbrett();
	}
}
```

der hintergrund ist komplett grün, weil die visualArea als Backgroundfarbe grün hat, die farbe die ich "this" gegeben hab, wird nicht berücksichtigt. wie erreich ich es, dass mir die von "this" gesetzt hintergrundfarbe für die größe des this-panels auch angezeigt wird. (der rest der visual Area soll aber grün sein).


----------



## Marco13 (23. Mrz 2008)

Hm - habs jetzt nicht getestet, aber hast du statt 
this.setOpaque(false); 
schonmal 
this.setOpaque(true); 
versucht?

Wenn's das nicht war, sag' nochmal bescheid.


----------



## andre111 (23. Mrz 2008)

du solltest dem frame ein Layout zuweisen ( z.B. FlowLayout ) und dann vllt noch dem frame das Schachbrett- JPanel hinzufügen( frame.getContentPane().add( this ); ) sonst wird es wohl kaum angezeigt

EDIT: habs falsch verstanden wie dus machen willst, hab gedacht du willst visualarea und das Schachbrett -JPanel nebeneinander sry


----------



## Marco13 (23. Mrz 2008)

Äh ach ja, das war ja das.... Wie schon im anderen Thread gesagt: Das Schachbrett wird mit schwarz/weißen Feldern gemalt - wo sollte man da den Hintergrund sehen?


----------



## usuff (24. Mrz 2008)

Marco13 hat gesagt.:
			
		

> Äh ach ja, das war ja das.... Wie schon im anderen Thread gesagt: Das Schachbrett wird mit schwarz/weißen Feldern gemalt - wo sollte man da den Hintergrund sehen?



ich habe etwas extra platz für die nummerierung der spielfelder gelassen, etwa 50 pixel. das mein schachbrett den hintergrund überdeckt ist klar und soll auch so sein. Aber die 50 pixel von spielfeldrand zur beschriftung, müssten nach meinem Verständnis eigentlich in der hintergrundfarbe des spielfeld-panels erscheinen und nicht in der farbe der visualArea, wie es derzeit passiert.


----------



## Marco13 (24. Mrz 2008)

:shock: oh ach ja sorry, jetzt hab ich's gesehen....: Die erste Zeile in der paintComponent sollte
super.paintComponent(g);
sein (in der super.paintComponent wird (unter anderem!) "der Hintergrund gemalt" - und das hat gefehlt)

Hab's auch mal getestet: Wenn man das jetzt noch einfügt, wird das Panel den ganzen EAST-bereich einnehmen, und das sieht evtl. nicht 100% so aus, wie du wolltest, aber das ist dann eher eine Layout-Frage - da kommt es dann darauf an, was noch alles in den Frame oder das Panel reinkommen soll, und wie alles am Ende angeordnet sein soll...


----------

