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 ミリ秒ごとに更新されます)。