В качестве общего совета в статье Painting в AWT и Swing описывается, как следует выполнять перерисовку в AWT или Swing.
Поскольку вы упомянули, что используете JApplet
, раздел « Живопись на Swing » будет здесь актуальным.
В частности, вместо Swing вместо перегрузки метода paint(Graphics g)
следует использовать метод paintComponent(Graphics g)
с вызовом метода paintComponent
суперкласса. Цитата из раздела " Методы рисования ":
Программы Swing должны переопределять paintComponent()
вместо переопределения
paint()
.
Это потому, что сам метод paint
разбит на три отдельных метода, переопределение самого метода paint
означает, что он будет предотвращать вызовы paintComponent
, paintBorder
и paintChildren
текущего класса и его классы предков.
Кроме того, для вызова метода run()
ваш JApplet
должен реализовывать Runnable
, а также иметь новый Thread
, вызываемый откуда-то внутри вашего апплета. (Возможно, в методах init
или start
.)
Edit:
Также следует отметить, что метод paintComponent
будет вызываться каждый раз, когда необходимо обновить экран. Метод paintComponent
будет вызываться несколько раз, так как saua указывает на , было бы не очень хорошей идеей создавать новые объекты в самом методе paintComponent
.
Кроме того, похоже, что дизайн должен иметь отдельный поток (так как апплет, кажется, реализует интерфейс Runnable
, как подразумевается из наличия run
метода), обновление JComponent
Состояние может иметь место в самом методе run
, при необходимости вызывая метод repaint
.