Panel in Panel zeichnen

Status
Nicht offen für weitere Antworten.
M

McCoy

Gast
Hoi,
ich habe ein kleines Verständnisproblem.

Ich will in den roten Panel einen Kreis zeichnen lasssen, doch leider passiert das nicht. Stattdessen wird mir diese kleine Viereck gezeichnet. Obwohl ich schon hier und da im code herumgespielt habe, also Werte wie setColor geändert, verändert sich nichts und ich verstehe nicht warum.

Vermute, dass mein "Problem" mit dem BorderLayout zusammenhängt. Über Hinweise wäre ich schon dankbar.

Java:
public class MyOval extends JFrame{
	
	private JPanel panel,circle;
	private JSlider slider;
	
	public Aufgabe2(String titel){	
		super(titel);
		setLayout(new BorderLayout());

		panel = new JPanel();
		panel.setBackground(new Color(255,0,0));
		add(panel);

		slider = new JSlider();
		add(slider, BorderLayout.SOUTH);
				
		circle = new JPanel();
		panel.add(circle);	
	}
	
	public class circle extends JPanel{		
		public void paintComponent(Graphics g){
			super.paintComponent(g);
			g.setColor(new Color(0,0,0));
			g.fillOval(10,10,50,50);
		}	
	}
	
	[...]
}
 

eRaaaa

Top Contributor
hi,
2 kleine dinge die mir beim überfliegen aufgefallen sind:

1.) public Aufgabe2(String titel){ ....} <-- dieser konstruktor in der klasse MyOval ???:L

2.) circle = new JPanel(); <-- du erstellst ja ein normales jpanel, anstelle deiner circle-klasse

Vermute, dass mein "Problem" mit dem BorderLayout zusammenhängt.

bedenke, dass das borderlayout zu dem frame gehört! das 1. panel hat per default ein flowlayout
 
M

McCoy

Gast
1.) Habe den Klassennamen beim Einfügen abgeändert und den Konstruktor einfach vergessen
2.) Danke für den Hinweis, habe ich gleich geändert.

So ich hab's jetzt etwas vereinfacht und es funktioniert auch so

Java:
	private Circle circle;
	private JSlider slider;
	
	private MyOval (String titel){	
		super(titel);
		setLayout(new BorderLayout());	
		circle = new Circle();
		add(circle);
		
		slider = new JSlider();
		add(slider, BorderLayout.SOUTH);
	}
	
	public class Circle extends JPanel{			
		private Circle(){
			setBackground(Color.green);
		}
		
		public void paintComponent(Graphics g){
			super.paintComponent(g);
			g.setColor(new Color(0,0,0));
			g.fillOval(10,10,50,50);
		}

Hmn... ich weiß zwar immer noch nicht warum das davor nicht so funktioniert hat wie es sollte - werde da wohl noch etwas herumspielen müssen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben