Probleme bei Java Applet

Hatebreed89

Grünschnabel
Hallo,

ich komme mit meiner Aufgabe nicht weiter.
Ich hoffe ihr könnt mir helfen.

Bei dem Applet ist ein Hintergrundbild (Hotel) mit 4 Fensterreihen a 9 Fenster(also 4 Stockwerke, jedes hat 9 Fenster)

Meine Aufgabe ist es, die Fenster die grün markiert sind beim draufklicken rot zu färben
aber ich bekomme es einfach nicht hin dass alle Fenster rot bleiben, da es nur in den ersten 2 reihen funktionier (also nicht zeile 3 und 4, da funktioniert es net)
ich hoffe ihr könnt mir helfen
ich wäre euch sehr dankbar

Code:
import   java.applet.*;
import   java.awt.*;
import   java.awt.event.*;
import java.util.ArrayList;



    public class aufgabe2 extends Applet implements MouseListener {

        Image   hotel1;
   String  farbe = "#ff0000";
   String  farbe1 = "#00ff00";
   int zx [] = {10, 60, 190, 240, 286, 329, 379, 501, 546 };
   int zy [] = {140, 180, 220, 260};
   boolean[] zeile1 = new boolean[zx.length];
   boolean[] zeile2 = new boolean[zx.length];
   boolean[] zeile3 = new boolean[zx.length];
   boolean[] zeile4 = new boolean[zx.length];
   int k=0;
   int x=0;
   int y=0;


   public void init() {

      hotel1 = getImage (getDocumentBase (), "hotel.gif");
           this.addMouseListener(this);
          }

   public void paint (Graphics g){

      g.drawImage(hotel1,0,0,this);

      for (int j=0; j<=3; j++){
         for (int i=0; i<=8; i++){
            g.setColor (Color.decode (farbe1));
              g.fillRect (zx[i], zy[j],10, 20);

         }
      }

      g.setColor (Color.decode (farbe));
      for(int i = 0; i< zx.length; i++)
      {
          if (k==1)
          {
        	  if(zeile1[i])
                g.fillRect (zx[i], zy[0], 10, 20);

        	  if(zeile2[i])
                  g.fillRect (zx[i], zy[1], 10, 20);
              if(zeile3[i])
                  g.fillRect (zx[i], zy[2], 10, 20);
              if(zeile4[i])
              		g.fillRect (zx[i], zy[3], 10, 20);
//              k=0;
           }
      }
      k = 0;

   }

          public void mousePressed(MouseEvent evt) {

      boolean b = false;

      x = evt.getX();
      y = evt.getY();

      for (int j=0; j<=3; j++){
         if ((y>zy[j])&&(y<zy[j]+20))
         	{b=true;}
         for (int i= 0; i<=9; i++)
         {if (b && (x > zx[i]) && (x < zx[i]+10))
         	{ k=1;
         	b= false;
         	x=zx[i];
         	y=zy[j];

         	if(j == 0)
         	{
         		zeile1[i] = true;
         	}
         	else if(j == 1)
         	{
				zeile2[i] = true;
			}
			else if(j == 2)
			{
				zeile3[i] = true;
			}
         	else
         	{
         		zeile4[i] = true;
         	}
         	repaint();}
         }
      }

          }

   public void mouseEntered(MouseEvent evt) { }
          public void mouseExited(MouseEvent evt) { }
          public void mouseClicked(MouseEvent evt) { }
          public void mouseReleased(MouseEvent evt) { }

    }

mfg Hatebreed
 
Ich sehe nur 2 Reihen, und in denen geht es, auch wenn eine ArrayIndexOutOfBounds zwischendurch geschmissen wurde.

€: OK, ich bin ein Idiot. Dennoch funktioniert alles, trotz der Exceptions.


€²: Da du dich nicht meldest, habe ich die Zeit genutzt, selbst so etwas zu schreiben:
b6q2wujs1lz2kkijt.gif


Java:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.util.ArrayList;
import java.util.List;

public final class Appchen extends Applet
{
	private static final long serialVersionUID = 1L;

	private final int[] rowKoor = {
			10, 60, 190, 240, 286, 329, 379, 501, 546
	};
	private final int[] columnKoor = {
			140, 180, 220, 260
	};
	private List<Window> windowList;
	private Image background;
	
	public final void init()
	{
		this.background = getImage(getDocumentBase(), "hotel.png");
	
		this.windowList = new ArrayList<Window>();
		for(int i = 0; i < this.rowKoor.length; i++)
			for(int j = 0; j < this.columnKoor.length; j++)
				this.windowList.add(new Window(rowKoor[i], rowKoor[j]));
		this.addMouseListener(new ML(this.windowList, this));
	}	
	public final void paint(Graphics g)
	{
		g.drawImage(this.background, 0, 0, this);
	
		for(int i = 0; i < this.windowList.size(); i++)
		{
			Window window = this.windowList.get(i);
			
			g.setColor(window.getColor());			
			g.fillRect(window.getX(), window.getY(), 10, 20);
		}					
	}
} 
//////////////////////////////////////////////////////////////////////////
import java.awt.Color;

public class Window extends Object
{
	private int x;
	private int y;
	
	private Color paintcolor;
	private Color[] colors = {
			Color.red, Color.green
	};
	
	public Window(int i, int j)
	{
		super();
		
		this.x = i;
		this.y = j;
		this.paintcolor = colors[0];
	}
	public void switchColor()
	{
		if(this.paintcolor.equals(this.colors[0]))
			this.paintcolor = this.colors[1];
		else
			this.paintcolor = this.colors[0];
	}
	public int getX()
	{
		return(this.x);
	}
	public int getY()
	{
		return(this.y);
	}
	public Color getColor()
	{
		return(this.paintcolor);
	}
}
//////////////////////////////////////////////////////////////////////////
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

public class ML implements MouseListener
{
	private List<Window> windowList;
	private Appchen appchen;

	public ML(List<Window> list, Appchen appchen)
	{
		super();
		
		this.windowList = list;
		this.appchen = appchen;
	}
	public void mouseClicked(MouseEvent arg0)
	{
		for(int i = 0; i < this.windowList.size(); i++)
		{
			Window window = this.windowList.get(i);
			int x = window.getX();
			int y = window.getY();
			
			if(arg0.getX() > x && arg0.getX() < (x + 10) &&
					arg0.getY() > y && arg0.getY() < (y + 20))
			{
				window.switchColor();
				this.appchen.repaint();
				return;
			}
		}
	}
	public void mouseEntered(MouseEvent arg0){}
	public void mouseExited(MouseEvent arg0){}
	public void mousePressed(MouseEvent arg0){}
	public void mouseReleased(MouseEvent arg0){}
}
 
Zuletzt bearbeitet:
Zurück