提问人:CiY3 提问时间:9/13/2021 最后编辑:Andrew ThompsonCiY3 更新时间:10/7/2021 访问量:62
如何实现 JFrame 按钮来启动计时器?
How do I implement a JFrame button to begin a timer?
问:
我有一个简单的程序,它只是告诉你程序开始运行多久了。这是代码(就像预期的那样工作!
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.*;
@SuppressWarnings("serial")
public class Program extends JFrame {
JFrame frame;
JButton button;
public Program() {
frame.setLayout(new FlowLayout());
frame.add(button);
frame.setVisible(true);
button = new JButton("Click Me!");
button.addActionListener((ActionListener) this);
setTitle("Hello");
setSize(1200,800);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void frame(Graphics g) throws InterruptedException{
int decaseconds = 0;
int seconds = 0;
int minutes = 0;
int hours = 0;
for(int i = 0; i < 2; i++) {
i--;
decaseconds += 1;
if(decaseconds == 100) {
decaseconds -= 100;
seconds++;
}
if(seconds == 60) {
seconds -= 60;
minutes++;
}
if(minutes == 60) {
minutes -= 60;
hours++;
}
System.out.println(hours + " hours : " + minutes + " minutes : " + seconds + " seconds : " + decaseconds + " decaseconds ");
g.setColor(Color.white);
g.fillRect(0, 0, 1200, 800);
g.setColor(Color.blue);
g.drawString(hours + " hours : " + minutes + " minutes : " + seconds + " seconds : " + decaseconds + " decaseconds", 100, 100);
Thread.sleep(10);
}
}
public void actionPerformed(ActionEvent e) {
System.out.println("You have clicked the button");
}
public static void main(String[] args) throws InterruptedException {
Program p = new Program();
for(int i = 0; i < 1000; i++) {
p.frame(p.getGraphics());
Thread.sleep(1);
}
}
}
我想在程序中放一个按钮,您可以在其中单击按钮以启动计时器。所以我读了一个教程,发现这个:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ActionEventDemo implements ActionListener {
JFrame frame=new JFrame();
JButton button=new JButton("Click Me");
ActionEventDemo(){
prepareGUI();
buttonProperties();
}
public void prepareGUI(){
frame.setTitle("My Window");
frame.getContentPane().setLayout(null);
frame.setVisible(true);
frame.setBounds(200,200,400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void buttonProperties(){
button.setBounds(130,200,100,40);
frame.add(button);
button.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
//Changing Background Color
frame.getContentPane().setBackground(Color.pink);
}
}
public class MainClass {
public static void main(String[] args)
{
new ActionEventDemo();
}
}
我试图将两者合并,但我不知道为什么。有人可以告诉我我应该怎么做吗?提醒:我希望程序在我按下按钮后开始计数(如第一个示例)。
谢谢!
答:
0赞
RAVN Mateus
9/13/2021
#1
创建一个变量并使用其默认构造函数对其进行初始化。然后将 actionPerformed 代码更改为java.util.Timer timer
@Override
public void actionPerformed(ActionEvent e) {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Something, that should be executed every interval
}
}, 0, intervalInMilliseconds);
}
不过,您可能希望添加取消计时器 () 的可能性。timer.cancel()
下一个:如何从事件中获取数据到主函数?
评论