Eventprotokollierung

Status
Nicht offen für weitere Antworten.

Aphex

Mitglied
Hallo Leute,

ich habe ein Mosaikspiel (Applet), welches beim Klick auf ein Kärtchen (Canvas-Objekt) die umliegenden Karten "umdreht".
Das Spiel verfügt über ein Protokolfenster, welches das selbe Raster anzeigt wie das Applet. Soweit so gut.
In diesem Protokollfenster soll genau das Kärtchen "umgedreht" werden, welches im Applet angeklickt wurde.
So soll man einen Überblick haben, welche Kärtchen schon im Applet angeklickt wurden.
Ich weiß absolut nicht, wie ich den eventHandler dazu bewegt bekomme, die angeklickte Karte des Applets im Protokollfenster umzudrehen.
Ich wäre euch für eine Hilfestellung sehr dankbar. Ich liste mal die Klassen auf.
Ich weiss, dass es recht viel Code ist, ich bin aber wirklich schon ein wenig verzweifelt, da ich absolut ein Brett vor dem Kopf habe.
Wichtig sind die Klassen, ProtokollFrame, ProtokollModel, MosaikEventHandler für das Protokollfenster.

Danke schon mal!

Gruß
Aphex


Code:
<html>
<body>
<applet code=einsendeaufgabeJAV05.Mosaik.class width="300" height="300" >
<param name="raster" value="4" />
<param name="frame" value="on" />
</applet>
</body>
</html>

Code:
package einsendeaufgabeJAV05;

import java.awt.*;

import kapitel4.MosaikCanvas;
import kapitel4.MosaikEventHandler;
import kapitel4.MosaikModel;

public class FarbMosaik extends Panel {

protected MosaikModel mm;
    protected MosaikEventHandler eventHandler;

public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) {

    mm = new MosaikModel(raster, raster);
    eventHandler = new MosaikEventHandler(mm);
    setLayout(new GridLayout(raster, raster, 1, 1));
    int canvasBreite=breite/raster;


    for (int i=0; i< raster; i++) {
        for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            mc.addMouseListener(eventHandler);
            mm.putMObj(i, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            add(mc);
             }
    	}
  }
}

Code:
package einsendeaufgabeJAV05;

public interface ModelIF {
	public void action(int zeile, int spalte);
	public void putMObj(int zeile, int spalte, MosaikIF mOBj);
	public MosaikIF getMObj(int zeile, int spalte);
}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;
import java.applet.Applet;


public class Mosaik extends java.applet.Applet {

   private int raster;
   private Color farbeRueck, farbeVor;

   public void init() {
      resize(250, 280);
	  String temp=getParameter("raster");
      raster=Integer.parseInt(temp);
      farbeRueck=new Color(230,30,50);
      farbeVor=new Color(50,210,30);
      //Objekterzeugung vom Typ FarbMosaik
      FarbMosaik fm=new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
      add(fm);
      //Spiel mit oder ohne ProtokollFenster
      String sFrame = getParameter("frame");
      if (sFrame.equals("on")){
    	  ProtokollFrame pf =new ProtokollFrame(raster, getSize().width, farbeRueck, farbeVor);
            }
      }
}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;

public class MosaikCanvas extends Canvas implements MosaikIF {

   //Instanzvariablen
   private Color farbe, farbeRueck, farbeVor;
   private boolean seite;
   private int zeile, spalte;

   public Color getFarbe() {
      return farbe;
   }
   public void setFarbe(Color inValue) {
      this.farbe = inValue;
   }
   public boolean getSeite() {
      return seite;
   }
   public void setSeite(boolean inValue) {
      this.seite = inValue;
   }
   public int getSpalte() {
      return spalte;
   }
   public void setSpalte(int inValue) {
      this.spalte = inValue;
   }
   public int getZeile() {
      return zeile;
   }
   public void setZeile(int inValue) {
      this.zeile = inValue;
   }
   //Konstruktormethode
   public MosaikCanvas(int zeile, int spalte, Color farbeRueck, Color farbeVor) {
      this.zeile=zeile;
      this.spalte=spalte;
      this.farbeRueck=farbeRueck;
      this.farbeVor=farbeVor;
      setSeite(false);
      setFarbe(farbeRueck);
   }

   //Methode zum Drehen der Karten
   public void switchSeite() {
      seite=!seite;
      farbe=(farbe==farbeRueck) ? farbeVor : farbeRueck;
      repaint();
   }

   public void paint(Graphics g) {
      g.setColor(getFarbe());
      g.fillRect(0, 0, getSize().width-1, getSize().height-1);
   }
}

Code:
package einsendeaufgabeJAV05;

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.*;
import java.awt.Frame;

public class MosaikEventHandler implements MouseListener {

	ModelIF mm;
	ModelIF pmm;
	Hashtable modelTable;
	Frame fenster;
	Object key;
	Object keypf;
	private int zeile;
	private int spalte;

	public MosaikEventHandler(ModelIF mm) {
		this.mm=mm;
		modelTable=new Hashtable();
		key=new Integer(mm.hashCode());
		modelTable.put(key, mm);
	}
	public void addModel (ModelIF model) {
		key=new Integer(model.hashCode());
		//keypf=new Integer(model.hashCode());
		modelTable.put(key, mm);
		modelTable.put(key, pmm);
		//JOptionPane.showMessageDialog(null, fenster, "Test Titel", JOptionPane.OK_CANCEL_OPTION);

	}

	public ModelIF removeModel (ModelIF model) {
		key=new Integer(model.hashCode());
		return (ModelIF)modelTable.remove(key);

	}
	public void mouseClicked(MouseEvent me) {

	}
	public void mouseEntered(MouseEvent me) {

	}
	public void mouseExited(MouseEvent me) {

	}
	public void mousePressed(MouseEvent me) {

	}
	public void mouseReleased(MouseEvent me) {
		zeile=((MosaikIF)me.getSource()).getZeile();
		spalte=((MosaikIF)me.getSource()).getSpalte();
		Enumeration enumk=modelTable.keys();
		while(enumk.hasMoreElements()) {
			key=enumk.nextElement();
			((ModelIF)modelTable.get(key)).action(zeile, spalte);
			((MosaikIF)me.getSource()).switchSeite();

		}
	}
}

Code:
package einsendeaufgabeJAV05;

public interface MosaikIF {
	public boolean getSeite();
	public int getSpalte();
	public int getZeile();
	public void switchSeite();
}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;

//Programmlogik
public class MosaikModel implements ModelIF {

	MosaikIF [][] mObjects;
	int zeilen, spalten;

	//Konstruktor
	public MosaikModel (int zeilen, int spalten) {
		this.zeilen=zeilen;
		this.spalten=spalten;
		//zweidimensionales Array zur Verwaltung der "Karten"
		mObjects=new MosaikIF[zeilen][spalten];
	}
	public void switchNachbarn(int zeile, int spalte) {
		//erste Zeile: Mitte, links, rechts
		if(zeile-1>=0) {
			invert(zeile-1,spalte);
			if(spalte-1>=0)
				invert(zeile-1,spalte-1);
			if(spalte+1<spalten)
				invert(zeile-1,spalte+1);
		}
		//zweite Zeile:links, rechts
		if(spalte-1>=0)
			invert(zeile,spalte-1);
		if(spalte+1<spalten)
			invert(zeile,spalte+1);
		//dritte Zeile:Mitte,links,rechts
		if(zeile+1<zeilen) {
			invert(zeile+1,spalte);
			if(spalte-1>=0)
				invert(zeile+1,spalte-1);
			if(spalte+1<spalten)
				invert(zeile+1,spalte+1);
		}
	}
	//Umdrehen der "Karten"
	private void invert(int zeile, int spalte) {
		getMObj(zeile, spalte).switchSeite();
	}
	public void putMObj(int zeile, int spalte, MosaikIF mObj) {
		mObjects[zeile][spalte]=mObj;

	}
	public MosaikIF getMObj(int zeile, int spalte) {
		return mObjects[zeile][spalte];
	}
	public void action(int zeile, int spalte) {
		switchNachbarn(zeile, spalte);
	}


}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;

import javax.swing.JOptionPane;


public class ProtokollFrame extends java.awt.Frame {

	protected ModelIF pmm;
    protected MosaikEventHandler eventHandler;

public ProtokollFrame (int raster, int breite, Color farbeRueck, Color farbeVor) {

	Frame fenster=new Frame();
	fenster.setTitle("Protokollfenster");
	fenster.setBackground(Color.WHITE);
	fenster.setSize(300, 300);
	//Methode zum Platzieren des Frames
	fenster.setLocation(300, 10);

	pmm = new ProtokollModel(raster, raster);
    eventHandler = new MosaikEventHandler(pmm);
    fenster.setLayout(new GridLayout(raster, raster, 1, 1));
    int canvasBreite=breite/raster;

    for (int i=0; i< raster; i++) {
        for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            //mc.addMouseListener(eventHandler);
            pmm.putMObj(j, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            fenster.add(mc);
            }
    	}
    fenster.setVisible(true);
  }
}

Code:
package einsendeaufgabeJAV05;

public class ProtokollModel implements ModelIF {

	MosaikIF [][] mObjects;
	int zeilen, spalten;

	//Konstruktor
	public ProtokollModel (int zeilen, int spalten) {
		this.zeilen=zeilen;
		this.spalten=spalten;
		//zweidimensionales Array zur Verwaltung der "Karten"
		mObjects=new MosaikIF[zeilen][spalten];
	}
	//Umdrehen der "Karten"
	private void invert(int zeile, int spalte) {
		getMObj(zeile, spalte).switchSeite();
	}
	public void putMObj(int zeile, int spalte, MosaikIF mObj) {
		mObjects[zeile][spalte]=mObj;

	}
	public MosaikIF getMObj(int zeile, int spalte) {
		return mObjects[zeile][spalte];
	}
	public void action(int zeile, int spalte) {
	}
}
 

Marco13

Top Contributor
Viel code, und der Zusammenhang der Klassen erschließt sich nicht auf den ersten Blick, aber... GANZ grob gesagt: Kannst du nicht dort, wo du dan einen EventHandler registierst, noch einen weiteren anhängen?

NUR zur Verdeutlichung:
Code:
class FarbMosaik 
{
    public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) 
    {
        eventHandler = new MosaikEventHandler(mm);

        // Das Erstellen der Felder wie vorher, nur OHNE dass der EventHandler angehängt wird
        for (int i=0; i< raster; i++) {
            for (int j=0; j< raster; j++) {
                MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
                mm.putMObj(i, j, mc);
                mc.setSize(canvasBreite, canvasBreite);
                add(mc);
                 }
          } 

          // Das Anhängen des EventHandlers wird mit einer speziellen Methode gemacht
          registriere(eventHandler);
    }


    public void registirere(MouseListener mouseListener)
    {
        for (int i=0; i< raster; i++) {
            for (int j=0; j< raster; j++) {
            MosaikCanvas mc = hol dir den von da, wo er liegt - wo auch immer das ist (sorry...)
            mc.addMouseListener(eventHandler);
             }
       }
  }
}

Und dann eben in der Mosaik-Klasse sowas wie
Code:
    if (sFrame.equals("on")){
         ProtokollFrame pf =new ProtokollFrame(raster, getSize().width, farbeRueck, farbeVor);
         MouseListener mouseListener = erstelleDenMouseListenerDerDenProtokollFrameSteuert();
         fm.registriere(mouseListener);
      }

(Das jetzt nicht 1:1 abtippen - ist nur als möglicher Ansatz gedacht!)
 

Aphex

Mitglied
Hallo Leute,

Danke Marco. Ich habe das Ganze ein wenig umgebaut. Die Klasse ProtokollFrame gibt es nicht mehr. Ich erzeuge das ProtokollFenster in der Klasse FarbMosaik. Jetzt ist folgendes passiert. Wenn ich im Protokollfenster den MouseListener scharf mache (was aber nicht gewünscht ist), so dreht er mir im Protokollfenster die angeklickte Karte um und im Applet die umliegenden Karten. So soll es ja im Prinzip sein, nur, dass Aktion passieren soll, wenn man im Appletfenster eine Karte anklickt. Ich habe gestern bis 02.00 Uhr alles probiert und bekomme es einfach nicht hin.

Gruß
Jens



Code:
package einsendeaufgabeJAV05;

import java.awt.*;

public class FarbMosaik extends Panel {

	protected MosaikModel mm;
	protected ProtokollModel pmm;
    protected MosaikEventHandler eventHandler;

public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) {


	mm = new MosaikModel(raster, raster);
	eventHandler = new MosaikEventHandler(mm, pmm);
    setLayout(new GridLayout(raster, raster, 1, 1));
    int canvasBreite=breite/raster;


    for (int i=0; i< raster; i++) {
        for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            mc.addMouseListener(eventHandler);
            mm.putMObj(i, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            add(mc);
             }
    	}
	}

	public void protokollFenster (int raster, int breite, Color farbeRueck, Color farbeVor) {

		pmm = new ProtokollModel(raster, raster);
		Frame fenster=new Frame();
		fenster.setTitle("Protokollfenster");
		fenster.setBackground(Color.WHITE);
		fenster.setSize(300, 300);
		//Methode zum Platzieren des Frames
		fenster.setLocation(300, 10);
		fenster.setLayout(new GridLayout(raster, raster, 1, 1));
		int canvasBreite=breite/raster;

		for (int i=0; i< raster; i++) {
			for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            mc.addMouseListener(eventHandler);
            pmm.putMObj(i, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            fenster.add(mc);
            }
    	}
		fenster.setVisible(true);
	}
}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;
import java.applet.Applet;


public class Mosaik extends java.applet.Applet {

   private int raster;
   private Color farbeRueck, farbeVor;

   public void init() {
      resize(250, 280);
	  String temp=getParameter("raster");
      raster=Integer.parseInt(temp);
      farbeRueck=new Color(230,30,50);
      farbeVor=new Color(50,210,30);
//    Objekterzeugung vom Typ FarbMosaik
      FarbMosaik fm=new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
      add(fm);
      //Spiel mit oder ohne ProtokollFenster
      String sFrame = getParameter("frame");
      if (sFrame.equals("on")){
    	  fm.protokollFenster(raster, getSize().width, farbeRueck, farbeVor);

            }
      }
}
 

Marco13

Top Contributor
Marco13 hat gesagt.:
Code:
    public void registirere(MouseListener mouseListener)
    {
...
            MosaikCanvas mc = hol dir den von da, wo er liegt - wo auch immer das ist (sorry...)
...
Der Event-Handler muss an die MosaikCanvasse gehängt werden, die für das FarbMosaik erstellt werden. Auch wieder nur sinngemäß und zuer Verdeutlichung (die "schöne" Lösugn zu finden ist dein Job)

Code:
public class FarbMosaik extends Panel {
...

   private MosaikCanvas dieCanvasseVonDiesemFarbMosaik[][];

   public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) {
...
   dieCanvasseVonDiesemFarbMosaik = new MosaikCanvas[raster][raster];

    for (int i=0; i< raster; i++) {
        for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            dieCanvasseVonDiesemFarbMosaik[i][j] = mc;
....
             }
       }
   }

   public void protokollFenster (int raster, int breite, Color farbeRueck, Color farbeVor) {
....
      for (int i=0; i< raster; i++) {
         for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);

            // mc.addMouseListener(eventHandler); WEG
            dieCanvasseVonDiesemFarbMosaik[i][j].addMouseListener(eventHandler) // HIN
....
            }
       }
      fenster.setVisible(true);
   }
}
 

Aphex

Mitglied
Sobald ich folgende Zeile einfüge: fmmc[j].addMouseListener(eventHandler);

gibt es eine Fehlermeldung:

java.lang.NullPointerException
at einsendeaufgabeJAV05.FarbMosaik.<init>(FarbMosaik.java:25)
at einsendeaufgabeJAV05.Mosaik.init(Mosaik.java:19)
at sun.applet.AppletPanel.run(AppletPanel.java:417)
at java.lang.Thread.run(Thread.java:619)


So soll es aussehen. Das funktioniert momentan aber nur, wenn ich im Protokollfenster ein Kärtchen anklicke.
So soll es aber nicht sein.

mosaik.jpg



Gruß
Jens
 

Marco13

Top Contributor
Aphex hat gesagt.:
Sobald ich folgende Zeile einfüge: fmmc[j].addMouseListener(eventHandler);

gibt es eine Fehlermeldung:

java.lang.NullPointerException

Der einzige Grund, den das haben kann, ist, dass fmmc[j]==null ist - d.h. du hast den Array nicht gefüllt (in der inneren Schleife, im Konstruktor)
 

Aphex

Mitglied
Das funktioniert soweit. Ich bekomme aber nicht den eventHandler dazu, das Kärtchen im Protokollfenster mit umzudrehen.

Gruß
Jens

Code:
package einsendeaufgabeJAV05;

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.*;
import java.awt.Frame;

public class MosaikEventHandler implements MouseListener {

	ModelIF mm;
	ProtokollModel pmm;
	Hashtable modelTable;
	Object key, keypf;
	private int zeile;
	private int spalte;


	public MosaikEventHandler(ProtokollModel pmm, ModelIF mm) {
		this.pmm=pmm;
		this.mm=mm;
		modelTable=new Hashtable();
		key=new Integer(mm.hashCode());
		modelTable.put(key, mm);
	}

	public void addModel (ModelIF model) {
		key=new Integer(model.hashCode());
		modelTable.put(key, mm);
		modelTable.put(key, pmm);
	}

	public ModelIF removeModel (ModelIF model) {
		key=new Integer(model.hashCode());
		return (ModelIF)modelTable.remove(key);

	}
	public void mouseClicked(MouseEvent me) {
	}
	public void mouseEntered(MouseEvent me) {
	}
	public void mouseExited(MouseEvent me) {
	}
	public void mousePressed(MouseEvent me) {
	}
	public void mouseReleased(MouseEvent me) {
		zeile=((MosaikIF)me.getSource()).getZeile();
		spalte=((MosaikIF)me.getSource()).getSpalte();
		Enumeration enumk=modelTable.keys();
		while(enumk.hasMoreElements()) {
			key=enumk.nextElement();
//diesen Methodenaufruf bräuchte ich noch mal für das Protokollfenster. Dann wäre die Katze im Sack.
//Ich weiß aber nicht wie!!!! 
                      ((ModelIF)modelTable.get(key)).action(zeile, spalte);
//ich könnte auch diese Methode  für das Protokollfenster aufrufen. Irgendwie fehlt aber der Bezug dazu.
			pmm.action(zeile, spalte);
Hier habe ich mal geschaut, was überhaupt ankommt. Es wird alles brav übergeben.			
//System.out.println(pmm+ " Zeile:"+zeile+" Spalte:"+spalte);

		}
	}
}
 

Marco13

Top Contributor
Den EventHandler im Konstruktor das übergeben, worauf er "wirken" soll (einmal das Spielfeld, und einmal das Protokollfenster). Die Quick&Dirty-Lösung wäre, einen neuen EventHandler zu schreiben, der das macht, was er soll.
 

Aphex

Mitglied
Ich habe es hinbekommen. Ich dabke dir für deine Hilfestellung.
Hier mal die zwei Klassen mit dem funktionierenden Code.
Ich habe echt gedacht, dass ich es nie schaffe.

Gruß
Jens

Code:
package einsendeaufgabeJAV05;

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.*;
import java.awt.Frame;

public class MosaikEventHandler implements MouseListener {

	ModelIF mm;
	ProtokollModel pmm;
	Hashtable modelTable, modelTable1;
	Object key, keypf;
	private int zeile;
	private int spalte;


	public MosaikEventHandler(ModelIF mm, ProtokollModel pmm) {
		this.mm=mm;
		this.pmm=pmm;
		modelTable=new Hashtable();
		modelTable1=new Hashtable();
		key=new Integer(mm.hashCode());
		keypf=new Integer(pmm.hashCode());
		modelTable.put(key, mm);
		modelTable1.put(keypf, pmm);
	}

	public void addModel (ModelIF model) {
		key=new Integer(model.hashCode());
		keypf=new Integer(model.hashCode());
		modelTable.put(key, mm);
		modelTable.put(keypf, pmm);
		keypf=new Integer(model.hashCode());
	}

	public ModelIF removeModel (ModelIF model) {
		key=new Integer(model.hashCode());
		return (ModelIF)modelTable.remove(key);

	}
	public void mouseClicked(MouseEvent me) {
	}
	public void mouseEntered(MouseEvent me) {
	}
	public void mouseExited(MouseEvent me) {
	}
	public void mousePressed(MouseEvent me) {
	}
	public void mouseReleased(MouseEvent me) {
		zeile=((MosaikIF)me.getSource()).getZeile();
		spalte=((MosaikIF)me.getSource()).getSpalte();
		Enumeration enumk=modelTable.keys();
		while(enumk.hasMoreElements()) {
			key=enumk.nextElement();
			((ModelIF)modelTable.get(key)).action(zeile, spalte);
			((ModelIF)modelTable1.get(keypf)).actionProtokoll(zeile, spalte);
			System.out.println(keypf);
		}
	}
}

Code:
package einsendeaufgabeJAV05;

import java.awt.*;

public class FarbMosaik extends Panel {

	protected MosaikModel mm;
	protected ProtokollModel pmm;
    protected MosaikEventHandler eventHandler;

public FarbMosaik (int raster, int breite, Color farbeRueck, Color farbeVor) {


	mm = new MosaikModel(raster, raster);
	pmm = new ProtokollModel(raster, raster);
	eventHandler = new MosaikEventHandler(mm, pmm);
	setLayout(new GridLayout(raster, raster, 1, 1));
    int canvasBreite=breite/raster;


    for (int i=0; i< raster; i++) {
        for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            mc.addMouseListener(eventHandler);
            mm.putMObj(i, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            add(mc);
             }
    	}
	}

	public void protokollFenster (int raster, int breite, Color farbeRueck, Color farbeVor) {

		Frame fenster=new Frame();
		fenster.setTitle("Protokollfenster");
		fenster.setBackground(Color.WHITE);
		fenster.setSize(300, 300);
		//Methode zum Platzieren des Frames
		fenster.setLocation(300, 10);
		fenster.setLayout(new GridLayout(raster, raster, 1, 1));
		int canvasBreite=breite/raster;

		for (int i=0; i< raster; i++) {
			for (int j=0; j< raster; j++) {
            MosaikCanvas mc = new MosaikCanvas (i, j, farbeRueck, farbeVor);
            pmm.putMObj(i, j, mc);
            mc.setSize(canvasBreite, canvasBreite);
            fenster.add(mc);
            }
    	}
		fenster.setVisible(true);
	}
}
 
Status
Nicht offen für weitere Antworten.

Oben