Hallo,
ich versuche ein Brettspiel nach MVC-Vorlage zu implementieren. Ich habe ein Frame, dem ein Panel übergeben wird, in dem das Brett gemalt wird. Jetzt möchte ich weiter, dass auf Mausklick in bestimmten bereichen ein Spielstein in Forem eines Bildes gemalt wird.
Nach durchforsten diverser Themen hier, habe ich diesen Versuch gestrichen:
auch weil sich das getGraphics() nicht mit der static-variante vereint...
und habe es mir der paintComponent Methode versucht. meine methode sieht jetzt wie folgt aus:
Dies eröffnet mir 1Frage und 1Problem:
Frage: in der Klasse Merelpainter habe ich jetzt 2 methoden paintComponent (1für das Spielbrett, 1 für die Spielsteine) --> können die sich in die Quere kommen bzw. kann ich diese 2 Methoden in der selben Klasse implementieren..
Problem: wenn ich jetzt bei meiner spieldurchführung einen Spielstein setzen will, muss ich "Merelpainter.paintComponent(Graphics g, Field field)" aufrufen.. das Feld kann ich einfach bestimmen, aber wie übergebe ich das Graphics-Objekt, bzw. gibt es eine Möglichkeit das zu umgehen? (mein 1. Ansatz - siehe oben- hat sich dafür nicht geeignet..
kann mir da jemand weiterhelfen??
ich versuche ein Brettspiel nach MVC-Vorlage zu implementieren. Ich habe ein Frame, dem ein Panel übergeben wird, in dem das Brett gemalt wird. Jetzt möchte ich weiter, dass auf Mausklick in bestimmten bereichen ein Spielstein in Forem eines Bildes gemalt wird.
Nach durchforsten diverser Themen hier, habe ich diesen Versuch gestrichen:
Java:
public static void setStone(Field field) {
Graphics2D sSt = (Graphics2D) getGraphics();
border = 50;
squaresize = Merelpainter.getSquaresize();
BufferedImage redStone = null;
try {
redStone = ImageIO.read(new File("img/stone-red.png"));
} catch (IOException e) {
}
BufferedImage blueStone = null;
try {
blueStone = ImageIO.read(new File("img/stone-blue.png"));
} catch (IOException e) {
}
// Field x1-y7
if (field.getX() == XAxis.X1 && field.getY() == YAxis.Y7) {
if (UiModel.getCurrentPlayer().getColor() == StoneColor.WHITE) {
System.out.println("Roter stein gesetzt");
sSt.drawImage(redStone, (border / 2), (border / 2), null);
} else {
System.out.println("Blauer Stein gesetzt");
sSt.drawImage(blueStone, (border / 2), (border / 2), null);
}
}
}
und habe es mir der paintComponent Methode versucht. meine methode sieht jetzt wie folgt aus:
Java:
public class Merelpainter extends JPanel implements MouseMotionListener {
public static void paintComponent(Graphics g, Field field) {
Graphics2D sSt = (Graphics2D) g;
border = 50;
squaresize = Merelpainter.getSquaresize();
BufferedImage redStone = null;
try {
redStone = ImageIO.read(new File("img/stone-red.png"));
} catch (IOException e) {
}
BufferedImage blueStone = null;
try {
blueStone = ImageIO.read(new File("img/stone-blue.png"));
} catch (IOException e) {
}
// Field x1-y7
if (field.getX() == XAxis.X1 && field.getY() == YAxis.Y7) {
if (UiModel.getCurrentPlayer().getColor() == StoneColor.WHITE) {
System.out.println("Roter stein gesetzt");
sSt.drawImage(redStone, (border / 2), (border / 2), null);
} else {
System.out.println("Blauer Stein gesetzt");
sSt.drawImage(blueStone, (border / 2), (border / 2), null);
}
}
}
}
Dies eröffnet mir 1Frage und 1Problem:
Frage: in der Klasse Merelpainter habe ich jetzt 2 methoden paintComponent (1für das Spielbrett, 1 für die Spielsteine) --> können die sich in die Quere kommen bzw. kann ich diese 2 Methoden in der selben Klasse implementieren..
Problem: wenn ich jetzt bei meiner spieldurchführung einen Spielstein setzen will, muss ich "Merelpainter.paintComponent(Graphics g, Field field)" aufrufen.. das Feld kann ich einfach bestimmen, aber wie übergebe ich das Graphics-Objekt, bzw. gibt es eine Möglichkeit das zu umgehen? (mein 1. Ansatz - siehe oben- hat sich dafür nicht geeignet..
kann mir da jemand weiterhelfen??