2013-05-01 1 views
0

체스 스쿨 프로젝트를위한 GUI를 만들기 시작했습니다. 그리고 저는 그림 이동을 구현하는 동안 진지하게 붙어 있습니다.자바 GUI getComponent(), panel.remove()

주 응용 프로그램 창을 나타내는 LayerPane 창이 있습니다. 이 LayerPane에는 테스트 패널을 배치 한 다음 체스 창이 있습니다.

그래서 그와 같은 - 창 - 체스 판 - 테스트 패널이 같은 클릭에 사라질 수 있도록 노력

임 테스트. (넷빈즈에 의해 생성 된 코드)

private void testingPaneMouseClicked(java.awt.event.MouseEvent evt) {           
    Component Fig = evt.getComponent(); 

    System.out.println(Fig); 

    jLayeredPane1.remove(Fig); 
    jLayeredPane1.repaint(); 
} 

하지만 테스트 창에 클릭 할 때마다, 아무 일도 일어나지 않습니다. 원인은 getComponent() 메서드가 Pane을 테스트하는 대신 Chessboard Pane을 반환한다는 것입니다.

테스트 패널을 얻는 방법에 대한 조언이 있으십니까?

직접 삭제하지 않으면 효과가 있습니다.

jLayeredPane1.remove(testingPane); 

도움을 주시면 감사하겠습니다.

감사합니다. 트릭을 할해야

+0

더 도움이 빨리 들어, [SSCCE] (http://sscce.org/)을 게시 할 수 있습니다. –

답변

1

전화 revalidate()는 :

panel.remove(child); 
// tell the panel to re-calculate its internals 
panel.revalidate(); 
// now repaint - doesn't get automatically called 
panel.repaint() 
+0

iluxa 답장을 보내 주셔서 감사합니다. 그러나 나는 이미, revalidate를 포함한 모든 것을 시도했다. 문제는 evt.getComponent(); 체스 보드의 자식을 식별하지는 않지만 체스 보드 자체를 식별하므로 자식이 다음 단계에서 삭제 될 수 없습니다. – jankoritak

+0

문제가 해결사 인 것 같습니다. 나는 chessabord가 아닌 Pane을 테스트하기 위해 청취자를 추가했습니다. 올바르게 작동하는 것 같습니다. – jankoritak