计时器,显示在java中使用按钮之前必须等待的秒数
我正在尝试创建一个类似于传奇联盟的游戏来进行练习,我想这样做,当你点击一个按钮时,按钮会禁用5秒,而按钮文本会变成一个计时器,显示你在再次使用该按钮之前必须等待的秒数。我成功地使按钮禁用了5秒钟,但现在我卡在计时器部分 我尝试创建一个变量,然后将其除以1000(我必须将其除以1000,因为我也将此变量用于另一个禁用按钮的计时器),但我收到一条错误消息: 类型AbstractButton中的方法setText(String)不适用于参数(int) 下面是我上面所说的代码:计时器,显示在java中使用按钮之前必须等待的秒数,java,timer,jbutton,Java,Timer,Jbutton,我正在尝试创建一个类似于传奇联盟的游戏来进行练习,我想这样做,当你点击一个按钮时,按钮会禁用5秒,而按钮文本会变成一个计时器,显示你在再次使用该按钮之前必须等待的秒数。我成功地使按钮禁用了5秒钟,但现在我卡在计时器部分 我尝试创建一个变量,然后将其除以1000(我必须将其除以1000,因为我也将此变量用于另一个禁用按钮的计时器),但我收到一条错误消息: 类型AbstractButton中的方法setText(String)不适用于参数(int) 下面是我上面所说的代码: ImageIcon qA
ImageIcon qAbilityIcon=新的ImageIcon(getClass().getResource(“images/Jaws\u of the_Beast.png”);
JButton qAbilityBtn=新JButton(“Q”);
//创建一个计时器,禁用按钮5秒
int qCDTime=(int)5000;
计时器qCooldown=新计时器(qCDTime,new ActionListener(){
已执行的公共无效操作(操作事件evt){
qAbilityBtn.setEnabled(真);
qAbilityBtn.setText(“Q”);
}
});
qCooldown.setRepeats(false);
JLabel qAbility=新的JLabel();
qAbility.setIcon(qAbilityIcon);
qAbility.setBounds(90350,64,64);
qAbilityBtn.setBounds(903156435);
qAbilityBtn.setOpaque(假);
qAbilityBtn.setContentAreaFilled(假);
qAbilityBtn.1(假);
qAbilityBtn.setFocusable(假);
qAbilityBtn.addActionListener(e->{
int minQDmg=25;
int maxQDmg=75;
int qDmg=(int)(Math.random()*(maxQDmg-minQDmg+1)+minQDmg);
能力标签.setText(“你造成了”+qDmg+“伤害!”);
能力标签(170,10200,50);
qAbilityBtn.setEnabled(假);
//这里我得到了错误
qAbilityBtn.setText(qCDTime/1000);
qCooldown.start();
});
我知道这可能不起作用,但有人能告诉我为什么会出现这个错误,以及如何修复它吗
此外,如果这不起作用(这很可能不起作用),我如何制作计时器,显示您必须等待多少秒
我也用谷歌搜索了这个,但我没有找到我需要的,或者至少我不知道如何在我的代码中实现它
这是我的主要文件
这是我的游戏档案
我为我糟糕的英语和糟糕的解释技巧道歉 试着理解错误告诉你的是什么。您正在将类型为
int
的参数赋给需要类型为String
的参数的函数。要解决此错误,您可以替换此行:
qAbilityBtn.setText(qCDTime/1000)代码>
为此:
qAbilityBtn.setText(String.valueOf(qCDTime/1000))代码>
这将解决错误,但我非常确定代码不会执行您希望它执行的操作,因为按钮上只会显示qCDTime/1000
的当前值,它不会被更新。可能有很多方法可以做到这一点,但我会这样做。下面大部分内容是关于GUI布局的典型模板
- 使用摆动计时器控制事件
- 按钮和计时器共享侦听器,并使用
actionCommand
确定触发事件的组件
- 默认倒计时时间为5秒。计时器每秒发出一个事件
- 按钮将显示剩余的秒数
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class ButtonTimer extends JPanel {
JFrame f = new JFrame("Button Timer Demo");
JButton b = new JButton("Click Me!");
MyActionListener mal = new MyActionListener();
Timer t = new Timer(0, mal);
public ButtonTimer() {
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
add(b);
b.addActionListener(mal);
b.setPreferredSize(new Dimension(100, 40));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
t.setDelay(1000);
t.setActionCommand("timer");
}
public Dimension getPreferredSize() {
return new Dimension(200, 50);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ButtonTimer());
}
public class MyActionListener implements ActionListener {
public int seconds = 0;
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equals("timer")) {
if (seconds == 0) {
t.stop();
b.setText("Click Me!");
} else {
b.setText(seconds + "");
seconds--;
}
} else {
// must be button
if (seconds == 0) {
// only do button action if seconds == 0
seconds = 5;
// start timer
t.start();
}
}
}
}
}