Я пишу простую программу рисования, которая использует keyListeners. Он работает, но каждый раз, когда ему нужно рисовать другой круг, я должен использовать метод repaint(), иначе он не будет автоматически перерисовывать изображение после использования одной из клавиш со стрелками. Было бы хорошо, если бы он использовал слишком много CPU (около 50%) для такой простой программы. Любые идеи о том, как НЕ использовать метод repaint(), чтобы он мог делать все, что ему нужно, не съедая весь мой процессор? Вот исходный код:Перерисовать слишком много CPU
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class Game extends JFrame {
int x, y;
public class AL extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT) {
x--;
}
if (keyCode == e.VK_RIGHT) {
x++;
}
if (keyCode == e.VK_UP) {
y--;
}
if (keyCode == e.VK_DOWN) {
y++;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
public static void main(String[] args) {
Game game = new Game();
}
public Game() {
addKeyListener(new AL());
setTitle("Game");
setSize(500, 500);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 150;
y = 150;
}
@Override
public void paint(Graphics g) {
g.fillOval(x, y, 15, 15);
repaint();
}
}
все ответы отсутствуют две самые важные вещи 1. super.paint (очистка всех прошлых картин) в качестве первого. строка кода, перерисовка внутри краски создает цикл enless, 2. используйте JPanel с paintComponent – mKorbel