Zuerstmal der Code:
Klasse Beute:
Klasse Raeuber
Klasse Tile:
Klasse Map:
Klasse Fenster:
Beim Erzeugen eines neuen Fensters werden die Tiles ausgegeben(auch mit den Kreisen). Nach ca. einer Millisekunde verändern sich die Positionen der Kreise(das Panel zeichnet sich neu) und beim ausgeben von checkShapes() auf die Konsole kommen zwei Werte raus.
Sieht dann ungefährt so aus:
Bei folgendem Methodenaufruf: tiles[0][3].checkShapes();
Fenster "ploppt" auf --> Konsole zeigt true an
Danach verändert sich der Inhalt des Panels z.B Kreise waren an den Position [0][6],[0][3] und [5][4] und sind auf einmal an [1][3],[2][4] und [5][5] --> Konsole zeigt false.
Meine Frage ist nun wieso das Panel sofort wieder neu gezeichnet wird und wie ich den Fehler ausmerzen kann.
Mfg, Zitrus
Klasse Beute:
Java:
import java.awt.geom.Rectangle2D;
import java.awt.Graphics;
import java.awt.Color;
public class Beute extends Rectangle2D.Double
{
int width;
int heigth;
int x;
int y;
public Beute(int x, int y, int width,int heigth)
{
this.x = x;
this.y = y;
this.width = width;
this.heigth = heigth;
}
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillOval(x,y,width,heigth);
}
}
Klasse Raeuber
Java:
import java.awt.geom.Rectangle2D;
import java.awt.Graphics;
import java.awt.Color;
public class Raeuber extends Rectangle2D.Double
{
int width;
int heigth;
int x;
int y;
public Raeuber(int x, int y, int width,int heigth)
{
this.x = x;
this.y = y;
this.width = width;
this.heigth = heigth;
}
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillOval(x,y,width,heigth);
}
}
Klasse Tile:
Java:
import java.awt.geom.Rectangle2D;
import java.awt.Graphics;
import java.util.Random;
public class Tile extends Rectangle2D.Double
{
int x;
int y;
int width;
int heigth;
boolean test = false;
public Tile(int x, int y, int width, int heigth)
{
this.x = x;
this.y = y;
this.width = width;
this.heigth = heigth;
}
public void paintComponent(Graphics g) {
g.drawRect(x,y,width,heigth);
}
void addShapes(Rectangle2D.Double shape, Graphics g) {
if(shape instanceof Beute) {
Beute beute = (Beute)shape;
beute.paintComponent(g);
test = true;
}
else if(shape instanceof Raeuber) {
Raeuber raeuber = (Raeuber)shape;
raeuber.paintComponent(g);
test = true;
}
}
boolean checkShapes() {
return test;
}
}
Klasse Map:
Java:
import java.util.Random;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
public class Map
{
Tile[][] tiles;
Random r;
public Map() {
tiles = new Tile[6][6];
r = new Random();
}
void drawRandom(Graphics g) {
for(int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
int zufall = r.nextInt(3);
if(zufall == 0){
tiles[i][j].addShapes(new Beute((100*j) + 25,(100*i) + 25,50,50), g);
}
else if(zufall == 1) {
tiles[i][j].addShapes(new Raeuber((100*j) + 25,(100*i) + 25,50,50), g);
}
else {
}
}
}
}
void draw(Graphics g) {
for(int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
tiles[i][j] = new Tile(100 * j, 100 * i, 100, 100);
tiles[i][j].paintComponent(g);
}
}
}
}
Klasse Fenster:
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
public class Fenster extends JFrame
{
Map map;
public Fenster(Map m)
{
super("Biologie-Game");
this.map = m;
setSize(600,628);
setResizable(false);
MyPanel panel = new MyPanel();
add(panel);
setVisible(true);
}
class MyPanel extends JPanel {
public MyPanel() {
setSize(600,600);
}
public void paint(Graphics g) {
super.paintComponent(g);
map.draw(g);
map.drawRandom(g);
}
}
}
Beim Erzeugen eines neuen Fensters werden die Tiles ausgegeben(auch mit den Kreisen). Nach ca. einer Millisekunde verändern sich die Positionen der Kreise(das Panel zeichnet sich neu) und beim ausgeben von checkShapes() auf die Konsole kommen zwei Werte raus.
Sieht dann ungefährt so aus:
Bei folgendem Methodenaufruf: tiles[0][3].checkShapes();
Fenster "ploppt" auf --> Konsole zeigt true an
Danach verändert sich der Inhalt des Panels z.B Kreise waren an den Position [0][6],[0][3] und [5][4] und sind auf einmal an [1][3],[2][4] und [5][5] --> Konsole zeigt false.
Meine Frage ist nun wieso das Panel sofort wieder neu gezeichnet wird und wie ich den Fehler ausmerzen kann.
Mfg, Zitrus
Zuletzt bearbeitet: