[code=Java]import java.awt.*;
public class ProtokollFenster extends Frame {
ProtokollMosaik pm;
FarbMosaik fm;
Mosaik mm;
public ProtokollMosaik getProtokollMosaik() { return pm; }
public ProtokollFenster(String titel, int width, int raster, Color farbeRueck, Color farbeVor, int x, int y) {
super(titel);
this.setSize(width, width);
pm = new ProtokollMosaik(raster, width, farbeRueck, farbeVor);
this.add(pm);
//fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
pm.getProtokollModel().setMosaikModel (mm.getFarbMosaik().getMosaikModel());
this.setLocation(x,y);
this.setResizable(false);
this.setVisible(true);
}
}[/code]
[code=Java]import java.awt.Panel;
import java.awt.Color;
import java.awt.GridLayout;
public class FarbMosaik extends Panel{
ModelIF 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);
}
}
}
public MosaikModel getMosaikModel() { return (MosaikModel) mm;}
}[/code]
[code=Java]import java.awt.Panel;
import java.awt.Color;
import java.awt.GridLayout;
public class ProtokollMosaik extends Panel{
ModelIF pm;
protected MosaikEventHandler eventHandler;
public ProtokollMosaik(int raster, int breite, Color farbeRueck, Color farbeVor)
{
pm=new ProtokollModel(raster, raster);
eventHandler=new MosaikEventHandler(pm);
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);
pm.putMObj(i, j, mc);
mc.setSize(canvasBreite, canvasBreite);
add(mc);
}
}
}
public ProtokollModel getProtokollModel() { return (ProtokollModel) pm;}
}[/code]
[code=Java]public class ProtokollModel implements ModelIF{
MosaikIF[][] mObjects;
int zeilen, spalten;
MosaikModel mm;
public ProtokollModel(int zeilen, int spalten)
{
this.zeilen=zeilen;
this.spalten=spalten;
mObjects = new MosaikIF[zeilen][spalten];
}
public void switchSeite (int zeile, int spalte)
{
if (!getMObj(zeile, spalte).getSeite())
{
invert (zeile, spalte);
}
}
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)
{
switchSeite(zeile, spalte);
if (mm != null)
{
mm.action (zeile, spalte);
}
}
public void setMosaikModel (MosaikModel mosaikModel)
{
mm = mosaikModel;
}
}[/code]
[code=Java]public class MosaikModel implements ModelIF{
MosaikIF[][] mObjects;
int zeilen, spalten;
private ProtokollModel pm;
public MosaikModel(int zeilen, int spalten)
{
this.zeilen=zeilen;
this.spalten=spalten;
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);
}
}
}
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);
if (pm != null)
{
pm.action (zeile, spalte);
}
}
public void setProtokollModel (ProtokollModel protocolModel)
{
pm = protocolModel;
}
}[/code]
[code=Java]import java.awt.Color;
import java.applet.Applet;
import java.awt.Point;
import java.awt.Rectangle;
public class Mosaik extends Applet{
private Color farbeRueck, farbeVor;
private int raster;
private String temp2;
ProtokollFenster pf;
ProtokollModel pm;
FarbMosaik fm;
public FarbMosaik getFarbMosaik() { return fm; }
public void init()
{
resize(250, 280);
String temp = getParameter("raster");
temp2 = getParameter("protokollfenster");
try{
raster=Integer.parseInt(temp);
} catch(NumberFormatException nfe)
{
raster=5;
System.out.println("Default="+raster+" gesetzt. NumberFormatException: "+nfe.getMessage());
}
}
public void start()
{
farbeRueck = new Color(230, 30, 50);
farbeVor = new Color(50, 210, 30);
FarbMosaik fm = new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
add(fm);
if(temp2.compareTo("on") == 0)
{
Rectangle bounds = this.getBounds();
Point p = this.getLocation();
pf = new ProtokollFenster("Protokollfenster", getSize().width, raster, farbeRueck, farbeVor, p.x+bounds.width+7, p.y);
fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
}
}
}[/code]