我的第一个帖子,所以请原谅任何不正确的礼仪。我现在正在做学校的年终项目,我需要一点帮助。我在Netbeans做一个GUI java应用程序。我有两节课。一个是控制计时器的类,另一个是计分板屏幕的类。我需要更新计分板timerLabel与计时器类中正在计数的时间。它相当混乱,因为在timer类中有另一个计时器标签,它更新。我的问题是,我不能得到timerLabel在MatchScreen()更新。下面是我的代码:
定时器类
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class TimerClass extends JFrame {
Timer timer;
JLabel promptLabel, timerLabel;
int counter;
JTextField tf;
JButton button;
MatchScreen call = null;
public TimerClass() {
call = new MatchScreen();
setLayout(new GridLayout(4, 4, 7, 7));
promptLabel = new JLabel(""
+ "Enter number of seconds for the timer",
SwingConstants.CENTER);
add(promptLabel);
tf = new JTextField(5);
add(tf);
button = new JButton("Start");
add(button);
timerLabel = new JLabel("waiting...",
SwingConstants.CENTER);
add(timerLabel);
event e = new event();
button.addActionListener(e);
System.out.println("Button pressed");
}
public class event implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Action performed");
int count = (int) (Double.parseDouble(tf.getText()));
timerLabel.setText("Time left: " + count);
call.setTimerLabel(count);
System.out.println("Passed count to tc");
TimeClass tc = new TimeClass(count);
timer = new Timer(1000, tc);
System.out.println("Timer.start");
timer.start();
//throw new UnsupportedOperationException("Not supported yet.");
}
/*public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}*/
}
public class TimeClass implements ActionListener {
int counter;
public TimeClass(int counter) {
this.counter = counter;
}
public void actionPerformed(ActionEvent e) {
counter--;
if (counter >= 1) {
call.setTimerLabel(counter);
} else {
timerLabel.setText("END");
timer.stop();
Toolkit.getDefaultToolkit().beep();
}
}
}
public static void main(String args[]) {
TimerClass gui = new TimerClass();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(250, 150);
gui.setTitle("Time Setup");
gui.setVisible(true);
}
}
现在是记分牌屏幕
public class MatchScreen extends javax.swing.JFrame {
int redScore = 0, blueScore = 0, blueCat1 = 0,
blueCat2 = 0, redCat1 = 0, redCat2 = 0, winner = 0;
public MatchScreen() {
initComponents();
}
//Determine Winner of the match
public int getWinner() {
if (redScore > blueScore) {
winner = 1;
} else {
winner = 2;
}
return winner;
}
public void setTimerLabel(int a) {
int time = a;
while (time >= 1) {
timerLabel.setText("" + time);
}
if (time < 1) {
timerLabel.setText("End");
}
}
private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {
//Creates an object of the timerClass
TimerClass gui = new TimerClass();
gui.setSize(300, 175);
gui.setTitle("Time Setup");
gui.setVisible(true);
}
}
一些我觉得不相关的代码在MatchScreen()中被遗漏了。
多谢
解决了一般问题。我把所有的代码放到一个类中。虽然不理想,但很有效:/不管怎样,最后期限就要到了。
真诚谢谢。
您在setTimerLabel
方法中有一个while循环,我认为您不打算放在那里。同样,您将参数a
分配给time
,然后不再使用a
,为什么不将参数重命名为time
并绕过那个额外的变量?
编辑
对不起,我忘了解释我看到的:p如果你说call.setTimerLabel(10)
,那么你就击中了while循环(while(time >= 1
),这实际上是在运行while(10 >= 1)
,这是一个无限循环。当您第一次使用value >= 1
调用setTimerLabel
方法时,您的程序永远不会离开该方法。