Java定时器问题
我有一个小程序,模拟咖啡自动售货机。我正试图让文本准备好显示5秒钟。但它似乎不起作用。有人能告诉我我的计时器出了什么问题吗 qn1类是JApplet的类。 将调用init()来实例化变量 我将actionlistener添加到这两个按钮中,这样当我单击它们时它们会做出反应Java定时器问题,java,swing,timer,actionlistener,Java,Swing,Timer,Actionlistener,我有一个小程序,模拟咖啡自动售货机。我正试图让文本准备好显示5秒钟。但它似乎不起作用。有人能告诉我我的计时器出了什么问题吗 qn1类是JApplet的类。 将调用init()来实例化变量 我将actionlistener添加到这两个按钮中,这样当我单击它们时它们会做出反应 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class qn1 extends JApplet implements ActionListener {
private static int FULL = 4;
private int coffees = FULL;
private JPanel p;
private JButton jbtw, jbtb;
private Dispenser dis;
private JLabel jlbl;
private Timer timer;
public void init() {
setLayout(new BorderLayout(5, 5));
setSize(400, 500);
p = new JPanel(new GridLayout(1, 2));
jbtw = new JButton("White");
jbtb = new JButton("Black");
jbtw.addActionListener(this);
jbtb.addActionListener(this);
p.add(jbtw);
p.add(jbtb);
add(p, BorderLayout.NORTH);
dis = new Dispenser();
add(dis, BorderLayout.CENTER);
jlbl = new JLabel("Select", SwingConstants.CENTER);
add(jlbl, BorderLayout.SOUTH);
timer = new Timer(50, this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
if (coffees - 1 >= 0) {
coffees--;
jlbl.setText("Ready " + coffees);
}
timer.setInitialDelay(5000);
timer.start();
if (coffees == 0) {
jlbl.setText("Empty");
} else {
jlbl.setText("Select" + coffees);
}
}
}
}
class Dispenser extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(0, 0, 25, 50);
g.drawLine(25, 50, 55, 50);
g.drawLine(55, 50, 80, 0);
}
}
已调用计时器,但如果源不是按钮之一,则不执行任何操作:
if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
要回答您的评论,您可能需要以下内容:
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
timer.setInitialDelay(5000);
timer.start();
if (coffees == 0) {
jlbl.setText("Empty");
} else {
jlbl.setText("Select " + coffees);
}
}
else {
if (coffees - 1 >= 0) {
coffees--;
jlbl.setText("Ready " + coffees);
}
}
}
已调用计时器,但如果源不是按钮之一,则不执行任何操作:
if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
要回答您的评论,您可能需要以下内容:
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(jbtb) | e.getSource().equals(jbtw)) {
timer.setInitialDelay(5000);
timer.start();
if (coffees == 0) {
jlbl.setText("Empty");
} else {
jlbl.setText("Select " + coffees);
}
}
else {
if (coffees - 1 >= 0) {
coffees--;
jlbl.setText("Ready " + coffees);
}
}
}
@xinwei在调试模式下单步执行此操作可能会帮助您找到这一点——您可能想要习惯它(如果您不使用Eclipse或Netbeans,请开始!)我尝试删除if(e.getSource().equals(jbtb)| e.getSource().equals(jbtw)){但它不起作用。我添加了该语句,因为按钮和计时器都共享同一个源监听器,所以我想我应该在代码中区分源代码。你应该这样做。但是想想如果计时器调用监听器,你想做什么?另外,请注意,在将标签中的文本设置为
ready
,我尝试了在调试模式下,它确实进入了语句jlbl.setText(“Ready”+coffes);但它没有停留5秒钟。如果(e.getSource().equals(timer)){jlbl.setText(“Ready”+coffes);},则添加该语句,但它没有work@xinwei在调试模式下单步执行此操作将有助于您找到它--您可能希望习惯它(如果您没有使用Eclipse或Netbeans,开始!)我尝试删除if(e.getSource().equals(jbtb)| e.getSource().equals(jbtw)){但它不起作用。我添加了该语句,因为按钮和计时器都共享同一个源监听器,所以我想我应该在代码中区分源代码。你应该这样做。但是想想如果计时器调用监听器,你想做什么?另外,请注意,在将标签中的文本设置为ready
,我尝试了在调试模式下,它确实进入了语句jlbl.setText(“Ready”+coffes);但它没有停留5秒钟。如果(e.getSource().equals(timer)){jlbl.setText(“Ready”+coffes);}但它不起作用,我会添加该语句