gpt4 book ai didi

Java awt swing,带计时器的启动/停止按钮

转载 作者:行者123 更新时间:2023-12-02 02:12:46 24 4
gpt4 key购买 nike

我有一个简单的应用程序,可以在执行操作时更改标签的颜色。

当我单击应用程序的按钮(正在执行的操作)时,标签文本的颜色将按照计时器设置的时间间隔不断变化。

现在,我想要完成的是让我的按钮具有启动和停止标签文本颜色变化的功能。

我能够启动它,但我认为在尝试停止执行颜色更改时我的逻辑存在缺陷。

public void actionPerformed(ActionEvent e) 
{
Timer timer = new Timer(500, timerListener);
while(!timer.isRunning())
{
if(!timer.isRunning())
{
button.setText("Stop");
timer.start();
}
else
{
timer.stop();
button.setText("Start");
}
}

如果没有“else”后面的内容,我可以启动程序,但不能停止它。

请查看并提供帮助。谢谢!

最佳答案

好吧,每次调用该方法时,上面的代码都会创建一个新的计时器。因此对旧计时器的引用丢失了,这就是为什么调用 stop() 没有效果。

(很抱歉也将其作为评论发布,但在我将其全部输入后,我意识到这可能是整个答案,而不仅仅是有关编程风格的注释。因此我将其添加为答案。)

为了进行比较,这里有我的一些工作代码,它执行类似的操作。请注意,我仅在要启动新计时事件的情况下创建新计时器。停止情况只是停止现有的计时器,它永远不会创建计时器。

  @Override
public void actionPerformed( ActionEvent e )
{
if( timing ) {
timing = false;
timer.stop();
view.setStartButtonText( "start stting" );
view.setTimerLabel( "stopped" );
view.setBackground( Color.CYAN.darker() );
} else {
nanoTime = System.nanoTime();
view.setStartButtonText( "stop stting" );
timing = true;
timer = new javax.swing.Timer( 1000,
new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
long minuteTime = ( System.nanoTime() -
nanoTime ) /
( 60_000_000_000L );
view.setTimerLabel( minuteTime + " minutes" );
if( minuteTime > 50 )
if( darkBg ) {
view.setBackground( Color.PINK );
darkBg = false;
} else {
view.setBackground( Color.PINK.
darker() );
darkBg = true;
}
}
} );
timer.setRepeats( true );
timer.start();
}
}

关于Java awt swing,带计时器的启动/停止按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com