gpt4 book ai didi

java - 平滑组件在修改或循环后自动刷新(ex : timer)

转载 作者:行者123 更新时间:2023-12-01 14:42:12 25 4
gpt4 key购买 nike

我找了很多地方,但找不到如何自动刷新我的框架。当我单击按钮时,它确实可以工作(因为我已经使用了很多已经存在的示例),但不是自动工作。

我想创建一个扫雷游戏,我在其中添加了计时器,除了计时器计数之外,一切正常,但仅在单击按钮时更新。因此,简单地重做布局是行不通的...

尽管我知道我的计时器可以工作,但如果我将 System.out 放入其中,我会以稳定的秒速率看到它。

我将在下面放一个小程序,不是我的游戏,因为代码太长,而是我构建的一个小程序,它的情况大致相同,修复它将解决我的整体问题。

在这种情况下,我没有其他程序中完善的按钮,但是只有当我弄乱窗口时时间才会刷新。

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ClockTest {
JFrame frame = new JFrame();
JButton test1 = new JButton();
JTextField timer1 = new JTextField();
int hour = 0, min = 0, sec = 0;
String timing;

public ClockTest() {
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(center(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}

public Component center() {
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(1,2));
test1.setText("Dummy");
timer1.setEditable(false);
timer1.setText(timing);
pan.add(test1);
pan.add(timer1);
return pan;
}

public void count() {
sec++;
if(sec == 60) {
sec -= 60;
min++;
}
if(min == 60) {
min -= 60;
hour++;
}
timing = hour + ":" + min + " : " + sec;
//This is what i do in my game to refresh, to set flags, get mine "exploded"...
//But since i'm not pressing anything... it does not happen.
frame.add(center(), BorderLayout.CENTER);
}

public static void main(String[]args) {
final ClockTest test1 = new ClockTest();
TimerTask task = new TimerTask() {
public void run() {
test1.count();
}
};
Timer t = new Timer();
t.schedule(task,0,1000);
}
}

最佳答案

JPanel in puzzle game not updating

更改组件后,需要通过调用invalidate() 或 revalidate() 来“刷新”Swing 组件

关于java - 平滑组件在修改或循环后自动刷新(ex : timer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839986/

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