2013-07-12 4 views
2

나는 코드가 있습니다 왜 내 페인트가 작동하지 않습니까?

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) { 
    } 
} 

는 지금까지 내가 말할 수있는, 그것은 화면을 이동 블랙 박스를 확인해야합니다,하지만 대신에 화면이 업데이트되지 않으며, 기존의 박스는 삭제되지 않습니다. 그것은 화면의 거대한 검은 색 선으로 끝나고, 내가 뭘 잘못하고 있는지 전혀 알지 못한다. 나는 총 초보자이다.

+0

1) 당사 코드 애플릿 :

이의 라인을 따라 더해야 하는가? 사양으로 인해 예정된 경우. 선생님이 [왜 CS 교사가 Java 애플릿 교육을 중단해야하는지] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)를 참조하십시오. 2) Swing이 아닌 AWT를 사용해야하는 이유 AWT 구성 요소를 사용하여 포기해야하는 여러 가지 이유 때문에 [AWT를 통한 스윙 엑스트라] (http://stackoverflow.com/a/6255978/418556)에서이 대답을 참조하십시오. 이전 AWT 기반 API를 지원해야하는 경우 [중량 및 중량 구성 요소 혼합] (http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)을 참조하십시오. –

+0

페인트에서 g2.clearRect(); 할 수 있습니까? – eliteslayer

답변

1
public void paint(Graphics g) 
{ 
    setSize(500,500); 
    Graphics2D g2 = (Graphics2D)g; 
    g2.fill(rect); 
} 

repaint()에 GUI를 일으킬 수있는 paint(Graphics) 방법에서 아무것도 호출하지 마십시오. 구성 요소 추가, 구성 요소 내용 변경 또는 GUI의 크기 설정 은 모두 repaint()을 트리거하므로이 애플릿은 무한 루프가됩니다.

public void paint(Graphics g) 
{ 
    super.paint(g); // always call the parent method 1st.. 
    Graphics2D g2 = (Graphics2D)g; 
    g2.fill(rect); 
} 
+0

대단히 감사합니다. 이제는 더 잘 이해합니다. – user2577576

관련 문제