Hi zuammen,
ich bin gerade dabei mein erstes "vernünftiges" Java-Programm zu schreiben (Mini-Projekt für die Hochschule - Minesweeper hab ich mir ausgesucht). ich habe eine eigene Buttonklasse eingeführt, um den "Zustand" der Buttons zu speichern (Button == Mine, Button hat genau 1 Mine um sich, ...)
Mein ActionListener macht jedoch Probleme und ich komm nicht weiter...
Ich glaube mal gehört zu haben, dass man für jeden Button einen eigenen ActionListener anmelden soll, was in meinem Fall aber ziemlich viele werden dürften. Stimmt das?
Vielleicht könnt ihr mir ja etwas weiterhelfen.
"myActionListener cannot be resolved to a variable" meckert übrigens der Compiler in der 56. Zeile:
Vielen Dank schonmal für eure Hilfe!
Eigene Button-Klasse:
ich bin gerade dabei mein erstes "vernünftiges" Java-Programm zu schreiben (Mini-Projekt für die Hochschule - Minesweeper hab ich mir ausgesucht). ich habe eine eigene Buttonklasse eingeführt, um den "Zustand" der Buttons zu speichern (Button == Mine, Button hat genau 1 Mine um sich, ...)
Mein ActionListener macht jedoch Probleme und ich komm nicht weiter...
Ich glaube mal gehört zu haben, dass man für jeden Button einen eigenen ActionListener anmelden soll, was in meinem Fall aber ziemlich viele werden dürften. Stimmt das?
Vielleicht könnt ihr mir ja etwas weiterhelfen.
"myActionListener cannot be resolved to a variable" meckert übrigens der Compiler in der 56. Zeile:
Code:
grid[x][y].addActionListener(myActionListener);
Vielen Dank schonmal für eure Hilfe!
Java:
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.*;
public class MinesweeperGUI extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
private final int gridSpalten = 9;
private final int gridZeilen = 9;
private final int maxMinen = 10;
private int verbleibendeMinen = maxMinen;
private int verstricheneZeit = 0;
JButtonZustand [] [] grid = new JButtonZustand[gridSpalten] [gridZeilen];
private JTextField minenAnzeige = new JTextField(3);
private JTextField zeitAnzeige = new JTextField(3);
private JButton startButton = new JButton();
public MinesweeperGUI() {
super("MineSweeper v1.0");
setSize(400, 500);
setLayout(new BorderLayout());
JPanel panelAnzeige = new JPanel();
minenAnzeige.setEditable(false);
minenAnzeige.setText(Integer.toString(verbleibendeMinen));
zeitAnzeige.setEditable(false);
zeitAnzeige.setText(Integer.toString(verstricheneZeit));
panelAnzeige.setLayout(new FlowLayout());
panelAnzeige.add(minenAnzeige);
panelAnzeige.add(startButton);
panelAnzeige.add(zeitAnzeige);
add(panelAnzeige, BorderLayout.PAGE_START);
// Grid mit Buttons erstellen
JPanel panelGrid = new JPanel();
panelGrid.setLayout(new GridLayout(gridSpalten, gridZeilen));
for (int y = 0; y < grid.length; y++) {
for (int x = 0; x < grid[y].length; x++) {
grid[x][y] = new JButtonZustand ("(" + x + "," + y + ")");
grid[x][y].addActionListener(myActionListener);
panelGrid.add(grid[x][y]);
}
}
add(panelGrid, BorderLayout.CENTER);
minenLegen();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void minenLegen() {
int gelegteMinen = 0;
while (gelegteMinen < maxMinen) {
int zufallszahlX = (int) ( Math.random() * gridSpalten);
int zufallszahlY = (int) ( Math.random() * gridZeilen);
// Mine legen, wenn dort noch keine liegt
if ( grid[zufallszahlX] [zufallszahlY].getZustand() != 9) {
System.out.println("Gefärbt!");
grid[zufallszahlX] [zufallszahlY].setText("BOMBE!");
grid[zufallszahlX] [zufallszahlY].setZustand(9);
gelegteMinen++;
}
}
}
class myActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Event ausgelöst");
for (int y = 0; y < grid.length; y++) {
for (int x = 0; x < grid[y].length; x++) {
if ( e.getSource() == grid[x][y] ) {
if ( grid[x][y].getZustand() == 9 ) {
System.out.println("BOMBE!!!");
} else {
System.out.println("FAIL");
}
}
}
}
}
}
}
Eigene Button-Klasse:
Java:
import javax.swing.*;
public class JButtonZustand extends JButton {
/**
*
*/
private static final long serialVersionUID = 1L;
int zustand = 10;
public JButtonZustand(String text) {
super(text);
zustand = 10;
}
public int getZustand() {
return zustand;
}
public void setZustand(int zustand) {
this.zustand = zustand;
}
}