我正試圖在JFrame上設置一個簡單的時間報價器。我能夠顯示計數器的初始值,但後續更改不會在JFrame上更新。任何推動我對錯誤的答案,將不勝感激。我認爲這是重繪()沒有得到所謂的問題,但我不是結了錯誤,或者什麼,如果我嘗試把它JFrame repaint();如何用線程信息更新JFrame?
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毫秒更新一次)。
'SwingUtiltities .invokeLater'委託給'EventQueue.invokeLater',所以在這方面沒有什麼... – MadProgrammer
非常感謝你們。我一直都很沮喪地看着影片,並決定嘗試一些東西。我想你得從某個地方開始。 –