Я сейчас нахожусь в процессе создания игры с Java Swing.Мне нужен счетчик очков, поэтому я использую метод Graphics2D drawString
, чтобы нарисовать его.
Я удалил все, что не меняет проблему в моем коде, и в конце концов я обнаружил, что проблема былаdrawString
метод.
Это мой полный код: (Problem / src / defaultpackage / Problem.java)
// All the imports are here
public class Problem extends JPanel {
public static void main(String[] args) {
JFrame frame = new JFrame();
Problem problem = new Problem();
frame.add(problem);
frame.setTitle("Problem");
frame.setSize(350, 720);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.requestFocus();
frame.setVisible(true);
}
public Problem() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new ScheduleTask(),0,20);
// Changing '20' doesn't work
}
private void draw(Graphics g) {
System.out.println("draw");
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("S", 100, 100);
// If I remove this and replace it by:
//g2d.fillRect(0, 0, 100, 100);
// it works just fine
}
@Override
public void paintComponent(Graphics g) {
System.out.println("paintcomponent");
super.paintComponent(g);
draw(g);
}
private class ScheduleTask extends TimerTask {
@Override
public void run() {
System.out.println("repaint");
repaint();
}
}
}
Я ожидаю, что результат будет:
repaint
paintcomponent
draw
repaint
paintcomponent
draw
и так далее.Но вместо этого, в течение первых двух секунд, в течение которых работает программа, вывод будет просто:
repaint
repaint
repaint
И через эти две секунды все будет работать, как ожидалось.
Почему это произошло?