JFrame wird Übermalt

dimi_j

Grünschnabel
Hallo zusammen,
ich muss ein Hängemann-Spiel in Java programmieren, das auf den Touchscreen Monitor laufen muss. Ich habe bis jetzt schon alle Klassen, die mit Raten des Wortes zutun haben programmiert und habe mich an das Zeichnen von den "Hängemann" gemacht.

Dazu habe ich eine eigene Klasse erstellt und diese von der JFrame abgeleitet. Dann Zeichne ich über ein Graphig-Objekt das Männchen, so wie es sich gehört.

Mein Problem ist jetzt folgendes:
solange ich das Fenster nicht minimiere und dann wieder anzeigen, oder es kein popup-Fenster (bei Spielende) aufgeschaltet wird, funktioniert alles. Sobald aber eins der beschriebener Vorgängen durchgeführt wird, wird das JFrame mit den Teilen anderen Klassen übermalt. Dass heisst man sieht den Hängemann und die Teile anderen Klassen, wie die gerade gedrückte Taste und ein Teil des Rätzelwortes.(siehe Bilder: Rechst das erwünschte, links das fehlerhafte Verhalten)
Mir ist auch aufgefallen, dass wenn ich das Fenster nur leicht vergrößere, nach dem das Problem auftritt, die JFrame wieder richtig gezeichnet wird.



Ich komme nicht weiter. Kann mir bitte jemand helfen
 

Anhänge

  • Richtig.jpg
    Richtig.jpg
    51,3 KB · Aufrufe: 28
  • Falsch.JPG
    Falsch.JPG
    50,2 KB · Aufrufe: 27
Mir ist auch aufgefallen, dass wenn ich das Fenster nur leicht vergrößere, nach dem das Problem auftritt, die JFrame wieder richtig gezeichnet wird.

Also wodurch das Problem entsteht weiß ich so auf Anhieb leider auch nicht. Ist vermutlich auch schwierig zu sagen ohne den Code zu kennen. Aber der zitierte Satz zeigt eigentlich, dass dein Problem gelöst wird, sobald die Repaint-Methode aufgerufen wird. Im Zweifelsfall vielleicht einfach nen Listener an das JFrame hängen, der reagiert, wenn es minimiert/wieder hergestellt wird. Innerhalb des Listeners dann vielleicht mal irgendwas mit repaint, validate, updateUI auf dem JFrame oder dem Panel oder ähnliches probieren :)
 
also hier ist der Code von der Klasse
Code:
public class Animation extends JPanel
implements Observer
{
	private int mNumberOfWrongSings;
	/**
	 * 
	 */
	public Animation()
	{
		super();
		setBackground(Color.BLUE);
		mNumberOfWrongSings = 0;
		//setIgnoreRepaint(false);
		//setDebugGraphicsOptions(DebugGraphics.LOG_OPTION);
	}

	public void NewMan()
	{
		mNumberOfWrongSings = 0;
		repaint();
	}
		
	
	public void update(Observable o, Object obj ) 
	{ 
		++mNumberOfWrongSings;
		repaint();
	} 
	
	
	protected void paintComponent(Graphics g)
	{
		//g.clipRect(this.getX(), this.getY(), this.getWidth(), this.getWidth());
		//Graphics2D g2 = (Graphics2D)g;
		System.out.println(this);		
	//	g.clearRect(getX(),getY(), getWidth(), getHeight());
		g.fillOval(this.getWidth() * 4/7, this.getHeight()-50, 70, 100);
		
		g.drawLine(this.getWidth() * 4/7 + 35, this.getHeight() - 50 + 100 - 100,this.getWidth() * 4/7 + 35, this.getHeight() - 50 + 100 - 400);
		g.drawLine(this.getWidth() * 4/7+ 35, this.getHeight() - 50 + 100 - 400,this.getWidth() * 4/7 - 50, this.getHeight() - 50 + 100 - 400);
		g.drawLine(this.getWidth() * 4/7 - 50, this.getHeight() - 50 + 100 - 400,this.getWidth() * 4/7 - 50, this.getHeight() - 50 + 100 - 350);
		
		if(mNumberOfWrongSings == 0)
		{
			g.drawOval(this.getWidth() * 4/7 - 50-10, this.getHeight() - 50 + 100 - 350, 20,50);
		}
		
		
		if(mNumberOfWrongSings >= 1)
		{
			int line = 4;
			int gap = 1;
			int angle = 0;

			while (angle < 360)
			{
				g.drawArc(this.getWidth() * 4/7 - 50-15, this.getHeight() - 50 + 100 - 350, 30,30, angle, line);
				angle += gap + line;
			}
			//g.drawOval(this.getWidth() * 4/7 - 50-15, this.getHeight() - 50 + 100 - 350, 30,30);
			g.drawOval(this.getWidth() * 4/7 - 50-15+7, this.getHeight() - 50 + 100 - 350+10, 5,5);
			g.drawOval(this.getWidth() * 4/7 - 50-15+17, this.getHeight() - 50 + 100 - 350+10, 5,5);
			g.drawLine(this.getWidth() * 4/7 - 50-15+15, this.getHeight() - 50 + 100 - 350+14,this.getWidth() * 4/7 - 50-15+15, this.getHeight() - 50 + 100 - 350+19);
			g.drawLine(this.getWidth() * 4/7 - 50-15+9, this.getHeight() - 50 + 100 - 350+22,this.getWidth() * 4/7 - 50-15+19, this.getHeight() - 50 + 100 - 350+22);
		}
				
		if(mNumberOfWrongSings >= 2)
		{
			g.fillOval(this.getWidth() * 4/7 - 50-20, this.getHeight() - 50 + 100 - 350+35, 40,90);
			g.drawLine(this.getWidth() * 4/7 - 50, this.getHeight() - 50 + 100 - 350+30,this.getWidth() * 4/7 - 50, this.getHeight() - 50 + 100 - 350+35);
		}
			
		if(mNumberOfWrongSings >= 3)
		{
			g.drawLine(this.getWidth() * 4/7 - 50-15, this.getHeight() - 50 + 100 - 350+50, this.getWidth() * 4/7 - 50-40, this.getHeight() - 50 + 100 - 350+100);
		}
			
		if(mNumberOfWrongSings >= 4)
		{
			g.drawLine(this.getWidth() * 4/7 - 50+15, this.getHeight() - 50 + 100 - 350+50, this.getWidth() * 4/7 - 50+40, this.getHeight() - 50 + 100 - 350+100);
		}
			
		if(mNumberOfWrongSings >= 5)
		{
			g.drawLine(this.getWidth() * 4/7 - 50-10, this.getHeight() - 50 + 100 - 350+120, this.getWidth() * 4/7 - 50-15, this.getHeight() - 50 + 100 - 350+180);
		}

		if(mNumberOfWrongSings >= 6)
		{
			g.drawLine(this.getWidth() * 4/7 - 50+10, this.getHeight() - 50 + 100 - 350+120, this.getWidth() * 4/7 - 50+15, this.getHeight() - 50 + 100 - 350+180);
		}	
		
		paintComponents(g);
	} 	
}


ich habe schon versucht das repain() mehrfach nach einander aufzurufen, aber es hat leider nichts gebraucht.
 
Hi,
leider bin ich nicht der Experte für Handy Programmierung, aber wenn ich das richtig sehe verwendest Du swing, ist das korrekt?

repaint() scheint aus meiner Sicht der richtige Ansatz zu sein, aber es hat nur dann Sinn wenn der Code auch aufgerufen wird. Normalerweie müsste der JFrame dem JPanel sagen, dass es sich wieder neu zeichnen soll. Ich habe so erstmal den Verdacht, dass Dein JFrame vielleicht nicht so richtig mit Deinem JPanel kommuniziert.

Auf welche weise hast Deu denn Dein JPanel, welches den Hängman zeichnet int den JFrame gepackt?
(wäre von Vorteil diesen Codeabschnitt auch zu sehen).

Gruß
Takidoso
 
Die Klasse für das Zeichnen ist gans normal über ein BorderLayout eingebunden.
Das ist der Code von dem Fenster:

Code:
public class Frame
implements ActionListener,Observer,ComponentListener
{

	
	public JFrame mFenster;
	private Spielfeld mAnzeigefeld;
	private Tastatur mEingabefeld;
	private Dialog mHinweis;
	private Animation mHaengmann;
	private JPanel mContainer;
	private ButtonGroup mGroup;
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		Frame u = new Frame();	
	}
	
	
	
	/*
	 * Standartkonstruktor
	 */
	public Frame()
	{
		/*
		 * Fenster konfigurieren
		 */
		mFenster = new JFrame("Hängmann");
		mFenster.setLocation(100,100);
		mFenster.setPreferredSize(new Dimension(1000,800));
		mFenster.setSize(new Dimension(1000,800));
		mFenster.setMinimumSize(new Dimension(500,300));
		mFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

		mFenster.setLayout(new BorderLayout(10,0));
		//mFenster.setLayout(new GridLayout(2,1));
		//mFenster.setLayout(new FlowLayout());
		
	
		/*
		 * Menü erstellen und einbinden
		 */
		JMenuBar menubar = new JMenuBar();
		menubar.add(CreateFileMenu());
		menubar.add(CreateHelpMenu());
		mFenster.setJMenuBar(menubar);
		
		/*
		 * virtuelle Tastatur erzeugen
		 */
		mEingabefeld = new Tastatur();
		mEingabefeld.setPreferredSize(new Dimension(800,200));
		mEingabefeld.setSize(new Dimension(800,200));

		mFenster.add(mEingabefeld,BorderLayout.SOUTH);
		//mFenster.add(mEingabefeld);
		
		
		try
		{
			/*
			 * Feld für zu ratenden Word erzeugen und füllen
			 */
			mAnzeigefeld = new Spielfeld();
			//mAnzeigefeld.setPreferredSize(new Dimension(800,500));
			
			/*
			 * Animation von Hängemann erzeugen
			 */
			mHaengmann = new Animation ();
			//mHaengmann.setSize(SubDimension(mFenster.getPreferredSize(),mEingabefeld.getPreferredSize()));
			
			
			/*
			 * Kontainer für Spielfeld und Animation erzeugen und füllen
			 */
			mContainer = new JPanel();
			mContainer.setLayout(new FlowLayout(FlowLayout.LEFT));
			mContainer.add(mAnzeigefeld);
			mContainer.add(mHaengmann);
			
		//	mFenster.add(mAnzeigefeld,BorderLayout.WEST);
			//mFenster.add(mHaengmann,BorderLayout.EAST);
			//mFenster.add(mContainer,BorderLayout.NORTH);
			
			
			/*
			 * Kontainer in das Fenster einbauen
			 */
			mFenster.add(mContainer,BorderLayout.WEST);
			
			/*
			 * Klassenkomunikation erstellen
			 */
			mAnzeigefeld.addObserver(this,mHaengmann);
			mEingabefeld.addObserver(mAnzeigefeld);
		}
		catch(IOException r)
		{}
		
		/*
		 * Größe der Komponenten setzen
		 */
		SetKomponentSize(mFenster.getSize());
				
		
		/*
		 * Hinweisfenster,dass den Spieler über den ausgang des Spiels informmiert,
		 * erzeugen
		 */
		CreateHinweis();


		/*
		 * Listener auf Fenster setzen 
		 */
		mFenster.addComponentListener(this);
		
		
		/*
		 * Fenstericon setzen
		 */
		String sPath2Dia = "resource/Window_Icon.gif";
		
		URL url = ClassLoader.getSystemResource(sPath2Dia);
		Image icon1;
		try
		{
			icon1 = ImageIO.read(url);
			mFenster.setIconImage(icon1); 
		} catch (IOException e)
		{
			//e.printStackTrace();
		} 
		
		
		
		/*
		 * Fenster zeigen
		 */
		mFenster.pack();
		mFenster.setVisible(true);
	}
	
	
	/*
	 * Hinweisfenster,dass den Spieler über den ausgang des Spiels informmiert,
	 * erzeugen
	 */
	private void CreateHinweis()
	{
		mHinweis = new Dialog(mFenster,"Hinweis",true);
		mHinweis.setLayout(new GridLayout(3,1));
		mHinweis.setPreferredSize(new Dimension(340,150));
			
		/*=============    Dummi-Label erzeugen   =============*/
		JLabel lLabel = new JLabel("",JLabel.CENTER);
		
		mHinweis.add(lLabel);
	
		JPanel lContainer0 = new JPanel(new GridLayout(2,1));
		
		mGroup = new ButtonGroup();
		JRadioButton box = new JRadioButton("neues Spiel starten",true);
		box.setActionCommand("new");
		mGroup.add(box);		
		lContainer0.add(box);
		
		box = new JRadioButton("diese Fenster schliessen",false);
		box.setActionCommand(box.getText());
		mGroup.add(box);
		lContainer0.add(box);
		
		mHinweis.add(lContainer0);
		
		
		JPanel lContainer = new JPanel(new FlowLayout());
		
		JButton lOk = new JButton("Ok");
		lOk.setActionCommand("ok");
		//lOk.setPreferredSize(lButtonDimension);
		lOk.addActionListener(this);
		lOk.setFocusable(false);

		lContainer.add(lOk);
		
		mHinweis.add(lContainer);
		mHinweis.pack();
	}

	
	/*
	 * Hinweisfenster mittig positionieren und zeigen
	 */
	private void ShowDialog()
	{
		mHinweis.setLocation(mFenster.getX() + (mFenster.getWidth() - mHinweis.getWidth()) / 2,mFenster.getY() + (mFenster.getHeight() - mHinweis.getHeight()) / 2);
		mHinweis.setVisible(true);
	}

	
	/*
	 * File-Menü erzeugen
	 */
	private JMenu CreateFileMenu()
	{
		JMenu lReturnValue = new JMenu("Datei");
		JMenuItem lItem;
		
		lItem = new JMenuItem("neues Spiel");
		
		lReturnValue.add(lItem);
		lItem.addActionListener(this);
		lItem.setActionCommand("new");
		lReturnValue.addSeparator();

		lItem = new JMenuItem("Quit",'Q');
		lItem.addActionListener(this);
		lItem.setActionCommand("quit");
		lReturnValue.add(lItem);
		
		return lReturnValue;
	}
	
	
	/*
	 * Hilfe-Menü erzeugen
	 */
	private JMenu CreateHelpMenu()
	{
		JMenu lReturnValue = new JMenu("Hilfe");
		JMenuItem lItem;
		
		lItem = new JMenuItem("?");
		lReturnValue.add(lItem);
		
		lReturnValue.addSeparator();
		
		lItem = new JMenuItem("Über",'Ü');
		lReturnValue.add(lItem);
		
		return lReturnValue;
	}
	
	
	
	/*
	 * Aktionen von Menüs und Hinweisfenster auswerten
	 */	
	public void actionPerformed(ActionEvent event)
	{	
		String lCommand = event.getActionCommand();
		
		if(lCommand == "new")
			NewGame();
		
		if(lCommand == "quit")
			Close();
		
		if(lCommand == "ok")
		{
			mHinweis.setVisible(false);
			ButtonModel selected = mGroup.getSelection();
			if (selected != null)
			{
				if(selected.getActionCommand() == "new")
					NewGame();
			}
		}
	}
	
	
	
	/*
	 * neues Spiel starten
	 */
	private void NewGame()
	{
		try
		{
			mHinweis.setVisible(false);
			mAnzeigefeld.NewFeld();
			mHaengmann.NewMan();
			//t = new Animation();
			//mAnzeigefeld = new Spielfeld();
		}
		catch(IOException r)
		{
			//System.out.println("Exeption: " + r.getMessage());
		}
	}
	
	
	
	/*
	 * Fenster schliessen
	 */
	private void Close()
	{
		try
		{
			mAnzeigefeld.Close();
			System.exit(0);	
		}
		catch(IOException t)
		{
			//System.out.println(t.getMessage());
		}
	}
	
	
	/*
	 * Rückmeldung von dem Spielfeld empfangen, auswerten und Hinweisfenster zeigen
	 */
	public void update(Observable o, Object obj ) 
	{ 
		JLabel lT = (JLabel)mHinweis.getComponent(0);
		
		lT.setText(obj.toString());
		ShowDialog();
	} 
	
	
	
	/*
	 * zwei Dimensionen von einander subtrahieren
	 */
	private Dimension SubDimension(Dimension aDimension1,Dimension aDimension2)
	{
		Dimension lReturnDimension;
		
		lReturnDimension = new Dimension(aDimension1.width - aDimension2.width,aDimension1.height - aDimension2.height);		
		return lReturnDimension;
	}
	
	
	/*
	 * Groeßen der Komponenten in abhängigkeit von Fenstergröße setzen
	 */
	private void SetKomponentSize(Dimension aFrameDimension)
	{
		mContainer.setPreferredSize(new Dimension(aFrameDimension.width,aFrameDimension.height- mEingabefeld.getHeight() - 60));
		mContainer.setSize(new Dimension(aFrameDimension.width,aFrameDimension.height - mEingabefeld.getHeight() - 60));

		mAnzeigefeld.setPreferredSize(new Dimension((int)(aFrameDimension.width * 0.8) - 20,mContainer.getHeight()));
		mAnzeigefeld.setSize(new Dimension((int)(aFrameDimension.width * 0.8) - 20,mContainer.getHeight()));
	
		mHaengmann.setPreferredSize(new Dimension(aFrameDimension.width - mAnzeigefeld.getWidth() - 20,mContainer.getHeight()));
		mHaengmann.setSize(new Dimension(aFrameDimension.width - mAnzeigefeld.getWidth() - 20,mContainer.getHeight()));
	}

	
	
	
	/*
	 * =========================================================================================
	 * Listener auswerten
	 */
	public void componentResized(ComponentEvent event)
	{
		SetKomponentSize(event.getComponent().getSize());
		event.getComponent().repaint();
	}
	
	
	public void componentShown(ComponentEvent event)
	{
		event.getComponent().repaint();
	}
		
	public void componentMoved(ComponentEvent event)
	{
		event.getComponent().repaint();
	}
	
	public void componentHidden(ComponentEvent event)
	{
		event.getComponent().repaint();
	}	
}




takidoso das Spiel soll nicht auf Handy laufen, SWING kann man auch für alle anderen Anwendungen genauso benutzt werden.
 
Jo ... ich glaube das Problem ist einigermaßen klar ....
Du hat so ich es mal überflogen habe den JFrame direkt mit Komponenten beglückt (JFrame.add(...))
Du solltest stattdessen das sogenannte ContentPanel des JFrames holen und selbiges mit den Komponenten bestücken.
Verwende dazu die Methode JFrame.getContentPane(). Du erhälst damit ein JPanel, zu dem Du dann die gewünschten Komponenten hinzufügst mit add(...)


Mir fällt nebenbei auf, dass die Stuktur Deines Programms recht drollig erscheint und die Standartisierung der Groß/Kleinschreibung in Java (besonders bei Methoden) nicht in Deinem Code eingehalten wird. Fasse dies bitte nur als konstruktive Kritik auf.

Viel Spaß

Takidoso
 
Zuletzt bearbeitet:
Jo ... ich glaube das Problem ist einigermaßen klar ....
Du hat so ich es mal überflogen habe den JFrame direkt mit Komponenten beglückt (JFrame.add(...))
Du solltest stattdessen das sogenannte ContentPanel des JFrames holen und selbiges mit den Komponenten bestücken.
Verwende dazu die Methode JFrame.getContentPane(). Du erhälst damit ein JPanel, zu dem Du dann die gewünschten Komponenten hinzufügst mit add(...)


Mir fällt nebenbei auf, dass die Stuktur Deines Programms recht drollig erscheint und die Standartisierung der Groß/Kleinschreibung in Java (besonders bei Methoden) nicht in Deinem Code eingehalten wird. Fasse dies bitte nur als konstruktive Kritik auf.

Viel Spaß

Takidoso


Takidoso danke für die Antwort. Ich habe deinen Vorschlag befolgt und mein code soweit verändert
Code:
	mEingabefeld.setSize(new Dimension(800,200));

		
	getContentPane().add(mEingabefeld,BorderLayout.SOUTH);
		
	try
	{
		/*
		 * Feld für zu ratenden Word erzeugen und füllen
		 */
		mAnzeigefeld = new Spielfeld();
			
		/*
		 * Animation von Hängemann erzeugen
		 */
		mHaengmann = new Animation ();
			
		/*
		 * Kontainer für Spielfeld und Animation erzeugen und füllen
		 */
		mContainer = new JPanel();
		mContainer.setLayout(new FlowLayout(FlowLayout.LEFT));
		mContainer.add(mAnzeigefeld);
		mContainer.add(mHaengmann);
			
			
		/*
		 * Kontainer in das Fenster einbauen
		 */
		//mFenster.add(mContainer,BorderLayout.WEST);
		getContentPane().add(mContainer,BorderLayout.WEST);

Leider hat das nicht gebracht, das Problem tritt immer noch auf.Hast du vielleicht noch irgendein Tipp für mich, ich weis momentan echt nicht weiter.:confused:


Kannst du mir auch vielleicht mehr zu "Standartisierung der Groß/Kleinschreibung" sagen oder gibt es im netzt etwas dazu zu lesen
 
ich habe es geschafft,

ich habe einfach "super.paintComponents()" vor den zeichnen das Männchens aufgerufen und schon geht es.


Danke an alle für die Unterstützung.
 
Takidoso danke für die Antwort. Ich habe deinen Vorschlag befolgt und mein code soweit verändert
Code:
	mEingabefeld.setSize(new Dimension(800,200));

		
	getContentPane().add(mEingabefeld,BorderLayout.SOUTH);
		
	try
	{
		/*
		 * Feld für zu ratenden Word erzeugen und füllen
		 */
		mAnzeigefeld = new Spielfeld();
			
		/*
		 * Animation von Hängemann erzeugen
		 */
		mHaengmann = new Animation ();
			
		/*
		 * Kontainer für Spielfeld und Animation erzeugen und füllen
		 */
		mContainer = new JPanel();
		mContainer.setLayout(new FlowLayout(FlowLayout.LEFT));
		mContainer.add(mAnzeigefeld);
		mContainer.add(mHaengmann);
			
			
		/*
		 * Kontainer in das Fenster einbauen
		 */
		//mFenster.add(mContainer,BorderLayout.WEST);
		getContentPane().add(mContainer,BorderLayout.WEST);

Leider hat das nicht gebracht, das Problem tritt immer noch auf.Hast du vielleicht noch irgendein Tipp für mich, ich weis momentan echt nicht weiter.:confused:


Kannst du mir auch vielleicht mehr zu "Standartisierung der Groß/Kleinschreibung" sagen oder gibt es im netzt etwas dazu zu lesen

ja so sollte es auch nicht besser werden, wundere mich eigetnlich was dann passiert wenn Du sowas machst (ich würde mal vermuten da Frame von keiner Klasse abgeleitet wurde die eine solche Methode in sich birgt bekommst Du einen entsprechendne Compilerfehler).
Was ich meinte war, dass Du von Deinem JFrame die Routine getContentPane() verwendest! also In Deinem Fall wäre es sowas wie mFenster.getContentPane().add(....). Möglicherweise würde es schon ausreichen wenn Du in Zeile 80 statt
mContainer = new JPanel();
mContainer = mFenster.getContentPane();
schreiben würdest.

Aber wenn es bei Dir so funktioniert wie du im Nachhinein schilderst, ist es sich auch nicht schlimm, wenn auch herzlich unkonventionell.

Zum Thema Groß/Kleinschreibung wurde der (so wie ich es nenne) "stille Standard" von C übernommen.
Mehtoden und Bezeichner (Variablennamen) sollten mit einem Kleinbuchstaben beginnen.
Klassenamen (so tust Du es auch) mit einem Großbuchstaben
Konstanten (in Java static final) ausschließlich mit Großbuchstaben.
Um besser die Namen lesen zu können soll man bei zusammengesetzten Worten ab dem 2. Wort einen Großbuchstaben zu Anfang wählen.
Beispiel: meinHaus, rotesAuto, getColor()
Bei Konstanten sind im Gegensatz zu Methoden und Variablennamen Unterstreiche erlaubt
also z.B: MEIN_HAUS, ROTES_AUTO...


In diesem Sinne

Takidoso
 
Zuletzt bearbeitet:
ja so sollte es auch nicht besser werden, wundere mich eigetnlich was dann passiert wenn Du sowas machst (ich würde mal vermuten da Frame von keiner Klasse abgeleitet wurde die eine solche Methode in sich birgt bekommst Du einen entsprechendne Compilerfehler).
Was ich meinte war, dass Du von Deinem JFrame die Routine getContentPane() verwendest! also In Deinem Fall wäre es sowas wie mFenster.getContentPane().add(....). Möglicherweise würde es schon ausreichen wenn Du in Zeile 80 statt
mContainer = new JPanel();
mContainer = mFenster.getContentPane();
schreiben würdest.

Aber wenn es bei Dir so funktioniert wie du im Nachhinein schilderst, ist es sich auch nicht schlimm, wenn auch herzlich unkonventionell.


Ich habe auch zur erst "mContainer = mFenster.getContentPane();" ausprobiert, das Problem ist das getContentPane() eine JFrame und keine JPanel liefert.
 
Zurück