Hallo,
könnte mir jemand helfen? Denn ich bin langsam am verzweifeln. ;(
Es geht um TicTacToe:
Ich habe ein Klasse Gui, die das JFrame erstellt und dann die Klasse Spielbrett aufruft, die wiederum
die Methode paintComponent() in JPanel überschreibt damit das Spielbrett zeichnet.
Dann füllt die Klasse Spielbrett das Array mousePanel[] mit 9 neuen JTextAreas die jeweils auf den Kästchen der TicTacToe Matrix platziert sind (um entweder "O" oder "X" anzeigen zu können) und auf jedem von diesen JTextAreas wird ein MouseListener plaziert.
Ziel:
Wenn das Spielbrett das aller Erste mal gezeichnet wird, sollen diese JTextAreas "z" enthalten.
Und sollte danach der Spieler auf eins von den JTextAreas klicken, soll dieses (mithilfe der Methode mouseClicked (MouseEvent me) in "O" umgeändert werden.
Dabei muss mouseClicked ja überprüfen was für ein Text enthalten ist (um berreits belegte Felder nicht nochmal zu belegen), und dann diesen Text umändern und repaint() aufrufen.
Aber es funktioniert einfach nicht. Kann mit jemand sagen warum?
könnte mir jemand helfen? Denn ich bin langsam am verzweifeln. ;(
Es geht um TicTacToe:
Ich habe ein Klasse Gui, die das JFrame erstellt und dann die Klasse Spielbrett aufruft, die wiederum
die Methode paintComponent() in JPanel überschreibt damit das Spielbrett zeichnet.
Dann füllt die Klasse Spielbrett das Array mousePanel[] mit 9 neuen JTextAreas die jeweils auf den Kästchen der TicTacToe Matrix platziert sind (um entweder "O" oder "X" anzeigen zu können) und auf jedem von diesen JTextAreas wird ein MouseListener plaziert.
Ziel:
Wenn das Spielbrett das aller Erste mal gezeichnet wird, sollen diese JTextAreas "z" enthalten.
Und sollte danach der Spieler auf eins von den JTextAreas klicken, soll dieses (mithilfe der Methode mouseClicked (MouseEvent me) in "O" umgeändert werden.
Dabei muss mouseClicked ja überprüfen was für ein Text enthalten ist (um berreits belegte Felder nicht nochmal zu belegen), und dann diesen Text umändern und repaint() aufrufen.
Aber es funktioniert einfach nicht. Kann mit jemand sagen warum?
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.Graphics2D.*;
import java.awt.geom.*;
import java.util.Random;
import java.io.*;
public class GUI extends JFrame {
boolean neu = true;
boolean win = false;
boolean[] isClicked = new boolean[9];
String currentLetter = "z";
JTextField[] mousePanel = new JTextField[10];
int[] xlocation = { 53, 103, 153, 53, 103, 153, 53, 103, 153};
int[] ylocation = { 53, 53, 53, 103, 103, 103, 153, 153, 153};
int[] xCenter = { 75, 75, 75, 125, 125, 125, 175, 175, 175};
int[] yCenter = { 75, 125, 175, 75, 125, 175, 75, 125, 175};
public GUI(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int windowWidth = 600;
int windowHeight = 330;
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((d.width-windowWidth)/2, (d.height-windowHeight)/2, windowWidth, windowHeight);
setVisible(true);
setResizable(false);
Spielbrett p = new Spielbrett();
JTextArea a = new JTextArea();
p.setSize(300, 300);
p.setLocation(0, 0);
p.setBackground(Color.black);
p.setVisible(true);
a.setSize(300, 300);
a.setLocation(300, 0);
a.setBackground(Color.black);
a.setFont(new Font("Monospaced", Font.PLAIN, 15));
a.setForeground(Color.green);
a.insert("Welcome to the Matrix.. " , 1);
a.setVisible(true);
Container cp = getContentPane();
cp.setLayout(null);
cp.add(a);
cp.add(p);
this.setContentPane(cp);
}
public static void main(String[] args) {
new GUI("TickTackToe");
}
class Spielbrett extends JPanel implements MouseListener{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.green);
// paint in Zeitlupe --> vielleicht mit Timer?
int[] arx = {50, 50, 100, 100, 150, 150, 200, 200};
int[] ary = {200, 50, 50, 200, 200, 50, 50, 200};
int[] ary2 = {200, 200, 150, 150, 100, 100, 50, 50};
g.drawPolyline(arx, ary, arx.length);
g.drawPolyline(ary, ary2, ary.length);
Font font = new Font("Monospaced", Font.PLAIN, 20);
for(int i=0; i<9; i++){
mousePanel[i] = new JTextField();
mousePanel[i].setSize(44, 44);
mousePanel[i].setLayout(null);
mousePanel[i].setLocation(xlocation[i], ylocation[i]);
mousePanel[i].setBackground(Color.white); //make black finally
mousePanel[i].setFont(font);
mousePanel[i].setForeground(Color.green); //make finally black
mousePanel[i].setVisible(true);
mousePanel[i].setEditable(false);
mousePanel[i].addMouseListener(this);
this.add(mousePanel[i]);
if(neu = true){
mousePanel[i].setText(currentLetter);
}
}
}
public void mouseClicked (MouseEvent me) {
int x = me.getX();
int y = me.getY();
for( int i = 0; i<9; i++){
if (x > xlocation[i] && x < xlocation[i]+44 && y > ylocation[i] && y < ylocation[i]+44){
isClicked[i] = true;
if (isClicked[i] = true ){
String currentText = mousePanel[i].getText();
if (currentText.equals("z")){
currentLetter = " O";
repaint();
}
}else { isClicked[i] = false;};
}
}
}
public void mousePressed (MouseEvent me) {}
public void mouseReleased (MouseEvent me) {}
public void mouseEntered (MouseEvent me) {}
public void mouseExited (MouseEvent me) {}