2014-12-03 6 views
0

문제가 있습니다. 내 JFrame은 그 안의 내용으로 시작하지만 내용이 투명하게 표시됩니다.JFrame 배경 오류 : 원치 않는 투명성

package javagame; 

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JFrame; 

public class JavaGame extends JFrame{ 

    public JavaGame(){ 
     setTitle("Java Game"); 
     setSize(500, 500); 
     setResizable(false); 
     setVisible(true); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint (Graphics g){ 
     g.drawString("Hello World!", 250, 250); 
    } 

    public static void main(String[] args){ 

     new JavaGame(); 

    } 

} 

도움말이 감사합니다! (:

답변

2

두 가지 ... 먼저

...

당신은 paint 체인을 깨고있다 ... 당신은 전혀하지 않도록해야합니다

둘째

public void paint (Graphics g){ 
    // You MUST call super.paint here... 
    g.drawString("Hello World!", 250, 250); 
} 

비용은 paint과 같이 최상위 컨테이너 인 JFrame을 덮어 씁니다. 방금 발견 한 이유 중 하나와 최상위 컨테이너 인 두 배로 버퍼링되지 않습니다. 그러면 칠할 때 깜박 거리고, 다른 구성 요소 인 JRootPane, 내용 창, 유리 창 ... 등이 모두 포함되어 있습니다.이 모든 것은 사용자가 칠하려고하는 것을 칠할 수 있습니다.

또한, 프레임에 직접 그림은 ...

(나쁜 이유의) 예를 들어

... 당신이 원하는 무엇을 정말하지 않은 프레임의 장식, 아래에 페인트 할 수 있습니다

해결책 ...

JPanel과 같은 것으로부터 확장 한 사용자 정의 클래스를 만들고이 메서드를 paintComponent 메서드로 재정의하고 사용자 정의 페인팅을 수행하십시오. 콘텐츠 창에서 프레임 장식 내부에서 유지 관리되도록 보장하므로 무료로 이중 버퍼링을 지원하고 프레임의 테두리를 더 이상 염려 할 필요가 없습니다.

프레임의 크기를 설정하기 전에 setResizable 전화, 자세한 내용은 또한

에 대한 Painting in AWT and SwingPerforming Custom Painting를 참조하십시오,이 ...

프레임 장식의 크기를 변경하고 프레임 내용 영역 내에서 예상치 못한 추가 공간을 생성 할 수 있습니다