package gui;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import components.Field;
/**
* Klasse, die die benötigte Methode des MouseListeners implementiert.
*
* @author Tabea
*
*/
public class MyMouseListener extends MouseAdapter
{
private JTable grid;
private ArrayList<Integer> a = new ArrayList<Integer>();
private int row = 0,
column = 0,
counter = 0,
field_row_1 = 0,
field_column_1 = 0;
private Color backgroundColor;
/**
* Konstruktor, der ein neues Objekt der Klasse erstellt und die Tabelle/das
* Schachfeld übergeben bekommt.
* @param grid
*/
public MyMouseListener(JTable grid) {
this.grid = grid;
}
/**
* Methode, die reagiert, wenn auf eine Tabellenzelle geklickt wurde.
*/
@Override
public void mouseClicked(MouseEvent e) {
// es wird nur etwas gemacht, wenn man auch seinen Zug manuell eingeben
// soll und auf OK geklickt hat
if (Checkerboard.getInstance().isManualMove() &&
Checkerboard.getInstance().getMoveGui().isNormalButtonPressed()) {
this.counter++;
// nur wenn man höchstens zweimal geklickt hat pasiert etwas
if (this.counter < 3) {
CheckerboardPanel cbp_check = (CheckerboardPanel) this.grid.getValueAt(
this.grid.rowAtPoint(e.getPoint()), this.grid.columnAtPoint(e.getPoint()));
// aktuelle Zeile und Spalte holen
this.row = this.grid.rowAtPoint(e.getPoint());
this.column = this.grid.columnAtPoint(e.getPoint());
if (this.counter == 1 && cbp_check.isFigure()) { // beim ersten Klick muss das Feld besetzt sein
this.field_row_1 = this.row;
this.field_column_1 = this.column;
// ausgwähltes Feld farblich hervorheben
CheckerboardPanel cbp = (CheckerboardPanel) this.grid.getValueAt(
this.field_row_1, this.field_column_1);
this.backgroundColor = cbp.getBackground();
cbp.setBackground(new Color(154, 205, 50, 100));
Gui.getInstance().repaint();
Gui.getInstance().validate();
// Feldnummer errechnen und zur ArrayList hinzufügen
int fieldnumber = Checkerboard.convertIntoFieldNumber(this.field_row_1, this.field_column_1);
this.a.add(fieldnumber);
} else if (this.counter == 1 && !cbp_check.isFigure()) { // wird beim ersten Klicken ein unbesetztes
// Feld geklickt, passiert nichts
this.counter--;
} else if (this.counter == 2) { // beim zweiten Klicken darf jedes Feld gewählt werden
if (this.field_row_1 == this.row && this.field_column_1 == this.column) {
this.counter = 0;
CheckerboardPanel cbp = (CheckerboardPanel) this.grid.getValueAt(
this.field_row_1, this.field_column_1);
cbp.setBackground(this.backgroundColor);
Gui.getInstance().repaint();
Gui.getInstance().validate();
this.a.clear();
} else {
// ausgwähltes Feld farblich hervorheben
CheckerboardPanel cbp = (CheckerboardPanel) this.grid.getValueAt(this.row, this.column);
cbp.setBackground(new Color(154, 205, 50, 100));
Gui.getInstance().repaint();
Gui.getInstance().validate();
// Feldnummer errechnen und zur ArrayList hinzufügen
int fieldnumber = Checkerboard.convertIntoFieldNumber(this.row, this.column);
this.a.add(fieldnumber);
// wenn alles korrekt geklickt wurde, fragen, ob gewünschte Eingabe
int reply = javax.swing.JOptionPane.showConfirmDialog(
Gui.getInstance(), "Sind folgende Angaben "
+ "korrekt?\nFeld von: " + Field.getFieldName(this.a.get(0))
+ "\nFeld nach: " + Field.getFieldName(this.a.get(1)),
"Normaler Zug", JOptionPane.YES_NO_OPTION);
this.counter = 0;
if (reply == JOptionPane.YES_OPTION) {
ArrayList<Integer> al = new ArrayList<Integer>(this.a);
Checkerboard.getInstance().setArrayList(al);
Checkerboard.getInstance().setManualMove(false);
Checkerboard.getInstance().setMmIsReady(true);
this.a.clear();
} else {
this.a.clear();
javax.swing.JOptionPane.showMessageDialog(
Gui.getInstance(), "Bitte erneute Zueingabe!",
"Normaler Zug", JOptionPane.INFORMATION_MESSAGE);
}
// farbliche Hervorhebung wieder rückgängig machen
cbp = (CheckerboardPanel) this.grid.getValueAt(this.field_row_1, this.field_column_1);
if (this.field_row_1 % 2 == 0) {
if (this.field_column_1 % 2 == 0) {
cbp.setBackground(new Color(251, 225, 172, 100));
} else {
cbp.setBackground(new Color(41, 15, 5, 100));
}
} else {
if (this.field_column_1 % 2 == 0) {
cbp.setBackground(new Color(41, 15, 5, 100));
} else {
cbp.setBackground(new Color(251, 225, 172, 100));
}
}
cbp = (CheckerboardPanel) this.grid.getValueAt(this.row, this.column);
if (this.row % 2 == 0) {
if (this.column % 2 == 0) {
cbp.setBackground(new Color(251, 225, 172, 100));
} else {
cbp.setBackground(new Color(41, 15, 5, 100));
}
} else {
if (this.column % 2 == 0) {
cbp.setBackground(new Color(41, 15, 5, 100));
} else {
cbp.setBackground(new Color(251, 225, 172, 100));
}
}
Gui.getInstance().repaint();
Gui.getInstance().validate();
}
}
}
}
}
}