2011-05-16 6 views
1

나는 테트리스 기반 게임을 쓰고 있으며, 테트리스 조각이 떨어지는 실제 샤프트를 표시하기 위해 GridLayout을 사용하고 있습니다. GridLayout은 거의 JLabel 객체로 채워지지 않습니다. 샤프트는 그 자체로 다른 JPanel 내부의 JPanel입니다.이 패널은 전체 게임을 포함하고 제어하기 위해 사용하고 있습니다. 게임이 끝나면 "GAME OVER"라는 단어가 그리드 상단에 나타나기를 원하며, 작은 이미지가 나타날 수도 있습니다.그리드 레이 아웃 위에 텍스트 또는 이미지 그리기

내 샤프트는 JPanel을 확장하여 (paintComponent를 재정의 할 수 있도록) ShaftPanel 인스턴스이며 중첩 된 개인 클래스이므로 더 큰 JPanel의 개인 인스턴스 변수에 액세스 할 수 있습니다. 액세스해야하는 개인 인스턴스 변수는 부울 게임입니다. 게임이 세션에있을 때 true이고 게임이 끝나면 false로 설정됩니다.

public class ShaftPanel extends JPanel { 

public ShaftPanel(GridLayout g){ 
    super(g); 
} 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    if(game) 
    return; 
    g.setColor(Color.WHITE); 
    g.setFont(new Font("Courier New", Font.BOLD, 15)); 
    char[] c = {'G','A','M','E',' ','O','V','E','R'}; 
    g.drawChars(c,0,c.length,45,45); 
} 

}

나는 적절한시기에 샤프트의 다시 그리기() 메서드를 호출 큰 클래스의 하나 개의 방법이있다 : 여기 내 ShaftPanel 클래스의 코드입니다. print 문을 추가하면 paintComponent 메서드가 필요할 때 호출되고 setColor, setFont, drawChars 메서드가 모두 올바른 시간에 호출되고 있음을 나타냅니다. 그러나 아무 것도 나타나지 않습니다. 나는이 텍스트가 JLabel 그리드 아래에 그려져있어 보이지 않을 것으로 의심하지만이 문제를 해결하는 방법을 모른다. 그리드 안의 JLabels는 불투명하게 유지되어야합니다. 프로그램이 다른 색상을 사용하기 때문입니다. 패널의 다른 요소 위에 텍스트를 그리려면 paintComponent에 지시 할 수있는 방법이 있습니까?

답변

1

테트리스를 이런 식으로 만들지는 않았지만이 방법을 테스트하는 한 가지 방법은 "if (게임)"을 제거하고 JLabel이없는 경우에도 게임이 작성되는지 확인하는 것입니다 (항상 거기 그리고 때때로 공백이다).

필자는 GlassPanel을 사용한 적이 없다고 생각하지만 어떤 점이 유용한 지 생각합니다.이 패널은 현재 JFrame etx에 오버레이 될 수 있습니다.

는 더 많은 코드 및 정보를 원하시면 여기 봐 :

관련 문제