gpt4 book ai didi

Java,无限循环的替代品?

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

我正在制作一个程序,通过阵列显示细胞生长。我已经明白了,所以当我按下开始按钮时,数组会在 while(true){} 循环中每 10 秒更新一次。问题是我希望能够通过按暂停按钮来停止循环,但在循环中时,它不会让我使用任何控件。我需要除了无限循环之外的其他东西来刷新帧。

我是个新手,但我现在正在上java课。所以我对这门语言有一定的掌握。

最佳答案

您需要的是使用Timer它会改变组件的状态(在本例中为细胞生长),然后调用 JComponent.repaint()

这个计时器可以是cancelled要暂停然后重新启动,您只需创建一个新的:

因此您可以定义以下两种方法:

private Timer timer;
...
public void startPaiting() {
timer = new Timer();
timer.schedule( new TimerTask(){
public void run(){
changeState();
repaint();
}
},0, 10000 ); // 10 s.
}

public void pause(){
timer.cancel();
}

然后在“暂停/恢复”按钮中调用“pause/startPaiting”方法:

if( e.getActionCommand().equals("Pause")){
growPanel.pause();
setText("Resume");
} else {
growPanel.startPaiting();
setText("Pause");
}

这是查看其运行的完整源代码:

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;

public class Grow {

public static void main( String [] args ) {
JFrame frame = new JFrame();
final GrowPanel growPanel = new GrowPanel();
frame.add( growPanel );
frame.add( new JPanel(){{
add( new JButton("Pause"){{
addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent e ){
if( e.getActionCommand().equals("Pause")){
growPanel.pause();
setText("Resume");
} else {
growPanel.startPaiting();
setText("Pause");
}
}
});
}});}}, java.awt.BorderLayout.SOUTH );
frame.setSize( 400, 300 );
frame.setVisible( true );
}
}

class GrowPanel extends JComponent {
private int x;
private int y;
private Timer timer;
GrowPanel() {
x = 10;
y = 10;
startPaiting();
}

public void startPaiting() {
timer = new Timer();
timer.schedule( new TimerTask(){
public void run(){
changeState();
repaint();
}
},0, 100 ); // or 10000 which is 10 s.
}

public void pause(){
timer.cancel();
}

public void paintComponent( Graphics g ){
g.fillOval( x, y, 10, 10 );
}
private void changeState(){
x+=10;
if( x >= 400 ) {
y+=10;
x = 0;
}
if( y >= 300 ){
y = 10;
}
}

}

关于Java,无限循环的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2096578/

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