aufgelöst werden Ich habe ein Problem, wenn Sie versuchen, den Timer für Minesweeper zu codieren. Grundsätzlich habe ich diesen separaten Timer-Code, und in diesem Code habe ich CountTimer ct außerhalb des Konstruktors deklariert, und es funktioniert gut. Wenn ich jedoch versuche, dasselbe in meinem Minesweeper-Code zu tun, sagt der Compiler, dass CountTimer nicht in einen Typ aufgelöst werden kann. Kann mir bitte jemand helfen?CountTimer kann nicht in einen Typ
//////////This is my timer code.//////////
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CountTimerGUI2 extends JFrame implements ActionListener {
JPanel pan1 = new JPanel();
JLabel timeLabel = new JLabel();
JButton start = new JButton ("Start");
JButton stop = new JButton ("Stop");
CountTimer ct;
public CountTimerGUI2() {
pan1.setLayout (new BorderLayout());
timeLabel.setBorder (BorderFactory.createRaisedBevelBorder());
pan1.add (timeLabel, BorderLayout.NORTH);
start.addActionListener (this);
stop.addActionListener (this);
JPanel pan2 = new JPanel();
pan2.setLayout (new GridLayout());
pan2.add (start);
pan2.add (stop);
pan1.add (pan2, BorderLayout.SOUTH);
setContentPane (pan1);
setVisible (true);
pack();
ct = new CountTimer();
}
private void setTimerText (String sTime) {
timeLabel.setText (sTime);
}
public void actionPerformed (ActionEvent e) {
JButton button = (JButton)e.getSource();
if (button.equals (start)) {
ct.start();
}
else if (button.equals (stop)) {
ct.stop();
}
}
public static void main (String args []) {
java.awt.EventQueue.invokeLater (new Runnable() {
public void run() {
new CountTimerGUI2();
}
});
}
private class CountTimer implements ActionListener {
private static final int ONE_SECOND = 1000;
private int count = 0;
private boolean isTimerActive = false;
private Timer timer = new Timer (ONE_SECOND, this);
public CountTimer() {
count = 0;
setTimerText (TimeFormat (count));
}
public void actionPerformed (ActionEvent e) {
if (isTimerActive) {
count++;
setTimerText (TimeFormat (count));
}
}
public void start() {
count = 0;
isTimerActive = true;
timer.start();
}
public void stop() {
timer.stop();
}
}
private String TimeFormat (int count) {
int hours = count/3600;
int minutes = (count - hours * 3600)/60;
int seconds = count - minutes * 60;
return String.format ("%02d", hours) + " : " + String.format ("%02d", minutes) + " : " + String.format ("%02d", seconds);
}
}
//////////This is my Minesweeper code.//////////
import java.util.Scanner;
import java.util.Random;
//import java.util.*;
import java.awt.*;
import java.awt.event.*;
//import java.io.*;
//import java.io.FileWriter;
//import java.io.PrintWriter;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
public class Minesweeper extends JFrame implements ActionListener {
public static Scanner myScanner = new Scanner (System.in);
public static Random random = new Random();
JPanel pan1 = new JPanel();
JPanel pan2 = new JPanel();
JPanel pan3 = new JPanel();
JPanel pan1_1 = new JPanel();
JPanel pan1_2 = new JPanel();
JPanel pan1_3 = new JPanel();
JPanel pan1_3_D = new JPanel();
JButton button [][];
JButton Save = new JButton ("Save");
JButton Load = new JButton ("Load");
JButton New = new JButton ("New");
JButton One = new JButton ("1");
JButton Two = new JButton ("2");
JButton Three = new JButton ("3");
JButton R = new JButton ("R");
JLabel instruction = new JLabel ("Instruction Panel");//changeable
JLabel timeLabel = new JLabel();
JLabel score = new JLabel ("Score");//it is only temporary
CountTimer ct;
public Minesweeper (int row, int column) {
button = new JButton [row][column];
GridLayout gl_pan1 = new GridLayout (1, 3);
GridLayout gl_pan2 = new GridLayout (row, column);
GridLayout gl = new GridLayout (2, 1);//gl is for the 3 sub-panels in pan1
GridLayout gl_pan1_3_D = new GridLayout (1, 4);
pan1.setLayout (gl_pan1);
pan2.setLayout (gl_pan2);
pan1_1.setLayout (gl);
pan1_2.setLayout (gl);
pan1_3.setLayout (gl);
pan1_3_D.setLayout (gl_pan1_3_D);
setTitle ("Minesweeper");
JPanel frameBorder = (JPanel)getContentPane();
frameBorder.setLayout (new BoxLayout (getContentPane(), BoxLayout.Y_AXIS));
frameBorder.setBorder (new BevelBorder (BevelBorder.LOWERED));
pan1.setBorder (new EtchedBorder (EtchedBorder.LOWERED));
pan2.setBorder (new EtchedBorder (EtchedBorder.LOWERED));
pan3.setBorder (new EtchedBorder (EtchedBorder.LOWERED));
Save.setMinimumSize (new Dimension (25, 50));
Save.setPreferredSize (new Dimension (25, 50));
Save.setMaximumSize (new Dimension (25, 50));
Load.setMinimumSize (new Dimension (25, 50));
Load.setPreferredSize (new Dimension (25, 50));
Load.setMaximumSize (new Dimension (25, 50));
New.setMinimumSize (new Dimension (25, 50));
New.setPreferredSize (new Dimension (25, 50));
New.setMaximumSize (new Dimension (25, 50));
for (int r = 0; r < row; r++) {
for (int c = 0; c < column; c++) {
button [r][c] = new JButton();
button [r][c].setMinimumSize (new Dimension (20, 40));
button [r][c].setPreferredSize (new Dimension (20, 40));
button [r][c].setMaximumSize (new Dimension (20, 40));
pan2.add (button [r][c]);
//button [r][c].addActionListener (this);
}
}
pan1_1.add (Save);
pan1_1.add (Load);
pan1_2.add (timeLabel);
pan1_2.add (score);
pan1_3.add (New);
pan1_3_D.add (One);
pan1_3_D.add (Two);
pan1_3_D.add (Three);
pan1_3_D.add (R);
pan1_3.add (pan1_3_D);
/*Save.addActionListener (this);
Load.addActionListener (this);
New.addActionListener (this);
One.addActionListener (this);
Two.addActionListener (this);
Three.addActionListener (this);
R.addActionListener (this);*/
pan1.add (pan1_1);
pan1.add (pan1_2);
pan1.add (pan1_3);
pan3.add (instruction);
frameBorder.add (pan1);
frameBorder.add (pan2);
frameBorder.add (pan3);
setContentPane (frameBorder);
pack();
setVisible (true);
}
public void actionPerformed (ActionEvent event) {
}
public static void main (String args []) throws Exception {
int row = 10;
int column = 10;
new Minesweeper (row, column);
int current_row = 5;
int current_col = 5;
int percentage = 10; //this is subject to change
int number_of_mines = (int)(row*column*percentage*0.01);
int mine_position [] = new int [number_of_mines];
boolean revealed [][] = new boolean [row][column]; //whether the button is revealed or not
boolean mines [][] = new boolean [row][column]; //whether there is a mine or not
int revealed_number [][] = new int [row][column]; //the number that should appear on the revealed button
int counter = 0; //this is for the gameEnd method
boolean end = false; //whether the game is ended or not
}
wieder Ihren Code überprüfen, vielleicht Ich vermisse etwas, aber ich sah nicht die Initialisierung der CounterTimer-Variable in Minesweeper-Klasse-Konstruktor oder irgendwo für diese Angelegenheit –
CounterTimer ist nicht initialisiert. Dies ist der Grund, warum der Timer nicht funktioniert. Bitte initialisiere und korrigiere objektive Fehler wie das Registrieren von actionEvents und das Verschachteln der CounterTimer-Klasse in der MineSweeper-Klasse –