我试图在 JFrame 上设置一个简单的时间记录器。我能够显示计数器的初始值,但任何后续更改都不会在 JFrame 上更新。任何对我做错的事情的回答都会受到赞赏。我认为这是 repaint() 没有被调用的问题,但是我要么最终出现错误,要么尝试将其放入。
package com.game.ryan;
import java.awt.Dimension;
import javax.swing.JFrame;
class Screen extends JFrame{
private Dimension d = new Dimension(800,600);
private JFrame f;
public Screen(){
f = new JFrame();
f.setIgnoreRepaint(false);
f.setResizable(false);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setMinimumSize(d);
f.setLocationRelativeTo(null);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
Screen s = new Screen();
}
}
我也有:
package com.game.ryan;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyPanel extends JPanel{
private OneThread ot = new OneThread();
private int counter = ot.getThreadCounter();
public MyPanel(){
Thread t1 = new Thread(new OneThread());
t1.start();
}
public void paintComponent(Graphics g){
g.drawString("TIME: ", 10, 20);
g.drawString(Integer.toString(counter), 50, 20);
}
}
最后
package com.game.ryan;
public class OneThread implements Runnable{
private int counter = 45;
public OneThread(){
}
@Override
public void run() {
for(int x = 0; x >= 0; x++){
try{
Thread.sleep(1000);
counter++;
x++;
System.out.println(counter);
}catch(Exception e){
e.printStackTrace();
}
}
}
public int getThreadCounter(){
return counter;
}
}
我在控制台上的计数器越来越多,所以我猜这部分工作正常。
预期结果是计数器在 JFrame 中正确显示(每 1000 毫秒更新一次)。