Я пытаюсь нарисовать прямоугольник, который его положение обновляется каждую секунду, потому что у меня есть класс, который расширяет JPanel, и в нем я переопределил функцию paint (или paintComponent). Я попробовал как _ но, очевидно, эта функция вызывается только один раз и, как показано в приведенном ниже коде, когда я пытаюсь вызвать ее в бесконечном цикле с функцией repaint, она не вызвана, никаких идей, что я могу сделать?repaint in java не работает
public class Board extends JPanel implements KeyListener{
public void setUpBoard(){
JFrame frame = new JFrame();
Board board = new Board();
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setLocation(350, 80);
frame.add(board);
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.fillRect(food.getX(),200,20,20);
}
}
приведенный выше код графической части, ниже является основной функцией, которая находится в другом классе:
public static void main(String[] args) throws InterruptedException {
Board board = new Board();
FoodGenerator food = new FoodGenerator();
board.setUpBoard();
while(true){
board.repaint();
food.adder();
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
в приведенном выше food.adder кода, где положение прямоугольника обновлено, которое я проверил и не имеет никаких проблем.
Вы меняете что-либо между вызовами, чтобы перекрасить? Я бы проверял, является ли пищевой объект в вашем основном тем же, что и пища в вашем методе рисования. – bakalolo
Не переопределяйте 'paint', используйте' paintComponent'; Не разрушайте цепочку красок, убедитесь, что вы вызываете 'super.paintComponent'; Взгляните на [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) и [Выполнение пользовательской живописи] (http://docs.oracle.com/javase/tutorial/uiswing/painting /), чтобы лучше понять, как работает живопись. Кроме того, взгляните на [Создание графического интерфейса с JFC/Swing] (http://docs.oracle.com/javase/tutorial/uiswing/), чтобы лучше понять, как работает графический интерфейс Swing. – MadProgrammer
Вы также можете принять посмотрите [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) и для простоты, [Как использовать таймеры Swing] (http://docs.oracle.com/) javase/tutorial/uiswing/misc/timer.html) – MadProgrammer