2014-11-13 1 views
2

학교용 브레이크 아웃 게임을 프로그래밍해야하며 문제가 발생했습니다. 내 2D 수치는 페인트해야하지만 볼 수는 없습니다.애플릿에서 스윙하지 않음

이것은 내 애플릿입니다. test()는 아래에 링크 할 JPanel입니다.

public class Gamefield extends Applet{ 

test t; 


@Override 
public void init() { 
    t = new test(); 
    setSize(1600, 900); 

    Frame frame = (Frame)this.getParent().getParent(); 
    frame.setTitle("Breakout"); 



    add(t); 
} 
} 

여기는 repaint()를 호출하는 내 JPanel입니다.

public class test extends JPanel implements Runnable { 



public test(){ 

    setSize(1600,900); 


    Thread thread = new Thread(this); 
    thread.start(); 
} 

@Override 
public void run() { 
    while(true){ 
     System.out.println("a"); 
     try{ 
      repaint(); 
      Thread.sleep(1000/60); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void paintComponent(Graphics g) { 
    System.out.println("draw"); 
    super.paintComponents(g); 
    g.setColor(Color.BLACK); 
    g.drawOval(500,500,100,100); 
    g.fillRect(100,100,100,100); 
} 

} 

나는 누군가가 나를 도울 수 있기를 바랍니다. 나는 그것을 고치려고 무엇을 할 수 있는지 모른다.

+0

1) 애플릿을 코딩하는 이유는 무엇입니까? 교사가 지정했기 때문에 [CS 교사가 ** Java 애플릿 교육 **을 중단해야하는 이유] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should?hl=ko)를 참조하십시오. -stop-teaching-java-applets /)를 사용합니다. Swing 애플릿은'javax.swing.JApplet'입니다. 2)보다 빨리 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve) (최소한의 완전한 검증 가능 예제)를 게시하십시오. –

+0

Swing에서'Timer'를 사용하여'repaint() '를 호출하는 것이 더 쉽습니다 .. –

+0

그래도 여전히 사각형이 보이지 않습니다 .. 애플릿 때문에요? JFrame으로 변환해야합니까? –

답변

3
import java.awt.*; 
import javax.swing.*; 

public class GameField extends JApplet { 

    @Override 
    public void init() { 
     // Applet is FlowLayout by default, which does not stretch components 
     // let's use GridLayout instead 
     setLayout(new GridLayout()); 
     add(new test()); 
    } 
} 

class test extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     System.out.println("draw"); 
     // super.paintComponents(g); // WRONG method! Broken paint chain 
     super.paintComponent(g); 
     g.setColor(Color.BLACK); 
     g.drawOval(500, 500, 100, 100); 
     g.fillRect(100, 100, 100, 100); 
    } 
} 
+0

OMG, 고마워, setLayout이 문제를 해결 한 것 같습니다. 실제로 틀렸기 때문에 Super.paintComponent (g)를 변경했습니다. 작은 질문 하나, 가능한 경우 JFrame으로 변환해야합니까? 아니면 애플릿에서 계속 작업해야합니까? –

+0

글쎄, 이렇게 넣어 보자. 나는 *** 이전에 연결된 애플릿을 비난하는 블로그 기사를 썼다. 그리고 기사에서 언급했듯이, 나는'Applet' (&'JApplet') 태그에 대한 답변의 '상위'공급자입니다. –

+0

아, 넷에서 다른 사람들에게 정말로 배포해야하는 경우에는 [Java Web Start] (http://stackoverflow.com/tags/java-web-start/info)를 참조하십시오. –