2012-02-08 4 views
2

그래서 Canvas 기반 Java 응용 프로그램을 만들고 싶습니다. 내 기본 클래스를 Canvas으로 확장했으며 생성자에서 크기를 조정했습니다. Java 캔버스 가장자리 흰색

public CanvasApp() { 
    Dimension size = new Dimension(640, 480); 
    setSize(size); 
    setPreferredSize(size); 
    setMinimumSize(size); 
    setMaximumSize(size); 
} 

와 주요 기능에

, 나는 다음과 같이 그것을 위해 프레임을합니다

CanvasApp cnv = new CanvasApp(); 
JFrame frame = new JFrame(""); 
JPanel panel = new JPanel(new BorderLayout()); 
panel.setBorder(null); //I've tried this 
panel.setSize(640,480); //but still doesn't work =(
panel.add(cnv, BorderLayout.CENTER); 

frame.setContentPane(panel); 
frame.pack(); 
frame.setResizable(false); 
frame.setLocationRelativeTo(null); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 

그러나 콘텐츠 창 크기 650x490 나타납니다. 왜 이런거야?

그림도 첨부했습니다. JFrame의이 주위에 5px 국경이 있기 때문에

I've drew a line from 0,0 to 640,480

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. BTW - Swing GUI와 AWT 기반의 Component를 섞지 마십시오. 대신에'JComponent'를 사용하십시오. –

+0

미안하지만 그건 내 잘못 이었어. – Rothens

+0

O ... K 그 경우 * AWT 기반 ** Canvas **를 스윙 GUI와 혼합하지 마십시오. 사용하십시오. * –

답변

5

, 당신은 양각 국경의 종류를 알 수 있습니다 컴퓨터 화면에있는 모든 프레임에서 볼 - 그 테두리 높이에 10 개 픽셀을 추가하는 폭 5 픽셀이며, 폭. 패널을 640 x 480 크기로 할당하고 프레임 안쪽에 그 프레임을 배치했습니다. 그러면 프레임에 테두리가 추가됩니다.

+0

그건 내 첫 번째 생각 이었어. 그러나 패널은 650x490이 아니라 모든 것이 있습니다. ( – Rothens

+0

JPanel도 테두리가 있습니다. cnv.setBorder (BorderFactory.createEmptyBorder()) –

+0

패널 테두리를 null로 설정했지만 설정할 수 없습니다. 'Canvas'의 테두리 – Rothens

3

아마도 모든 JComponen에 테두리가 있기 때문에 CanvasApp를 JPanel에 넣고 JPanel 자체를 JFrame에 넣습니다. 결국 아마 너가 더 큰 차원을 얻는 이유 일 것이다. 여기에서 테두리 사용 방법은 oracle 웹 사이트를 참조하십시오. http://docs.oracle.com/javase/tutorial/uiswing/components/border.html

+0

테두리를 null로 설정하고 패널의 크기를 조정했지만 여전히 작동하지 않습니다 :( – Rothens

관련 문제