У меня есть код:Почему моя перекраска не работает?
import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class obj_Dingus
extends Applet
implements KeyListener{
private Rectangle rect; //The rectangle that we move
public void init()
{
this.addKeyListener(this);
rect = new Rectangle(0, 0, 50, 50);
}
public void paint(Graphics g)
{
setSize(500,500);
Graphics2D g2 = (Graphics2D)g;
g2.fill(rect);
}
@Override
public void keyPressed(KeyEvent e) {
repaint();
if (e.getKeyCode() == KeyEvent.VK_RIGHT){
rect.setLocation(rect.x + 2, rect.y);
} if (e.getKeyCode() == KeyEvent.VK_LEFT){
rect.setLocation(rect.x - 2, rect.y);
} if (e.getKeyCode() == KeyEvent.VK_UP){
rect.setLocation(rect.x, rect.y - 2);
} if (e.getKeyCode() == KeyEvent.VK_DOWN){
rect.setLocation(rect.x, rect.y + 2);
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
Насколько я могу судить, он должен сделать черный ящик, который перемещается по экрану, но вместо того, чтобы экран не обновляется, а старые коробки не очищены. Он заканчивается гигантской черной линией на экране, и я понятия не имею, что я делаю неправильно, я новичок.
1) Почему код апплета? Если это обусловлено спецификацией. учителем, пожалуйста, обратитесь к [Почему учителя CS должны прекратить преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/). 2) Почему AWT, а не Swing? См. Этот ответ на [Swing extras over AWT] (http://stackoverflow.com/a/6255978/418556) по многим причинам, чтобы отказаться от использования компонентов AWT. Если вам необходимо поддерживать более старые API на основе AWT, см. [Смешивание тяжеловесных и легких компонентов] (http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html). –
В краске вы можете сделать g2.clearRect(); – eliteslayer