2016-10-12 6 views
1

GUI에서 JPanel을 기본값으로 다시 칠하는 데 문제가 있습니다.Panel.repaint()가 패널을 새로 고치지 않는 것 같습니다.

내가 지금 사용하고 코드는 다음과 같습니다

가, 다시, 나는에 익숙하지 않아요, 나 자바 코드에 대해 정말 잘 알고, 그래서 신인 실수를 만들기 위해 저를 용서 : 지금까지 내가 '

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {           
    ... 

    pnlWagens1 = new pnlWagens(); 
    UpdateGUI(); 
}           

private void UpdateGUI(){ 
    pnlWagens1.repaint(); 
} 

을 위 코드를 시도하고 JPanel을 null로 설정하고 다시 칠해 패널의 새 인스턴스를 삽입 한 다음 다시 칠해 봤습니다. 지금까지 아무 것도 결실을 보지 못했습니다. 결국, 저는 여전히 GUI (그래픽 사용자 인터페이스)에 표시된 이전 패널 (및 그 값)과 관련되어 있습니다.

기본적으로 녹색 배경이있는 패널을 만들고 배경을 빨간색으로 만든 다음 패널을 다시 녹색 배경으로 재설정합니다. 그러나 결국 Reset을 누르면 여전히 빨간색 배경의 오래된 패널이 표시됩니다.

내가 뭘 잘못하고있는 지에 대한 통찰력은 간과 할 수 없을 것입니다.

+1

더 나은 도움을 얻으려면 [최소, 완전하며 검증 가능한 예제 프로그램] (http://stackoverflow.com/help/mcve) 작성 및 게시를 고려하십시오. 우리는 전체 프로그램을보고 싶지는 않지만 코드를 컴파일하고 문제와 관련이없는 추가 코드가없는 가장 작은 비트로 압축해야하지만 문제는 여전히 나타납니다. 버그를 격리하고 노출하기 만하면 문제를 직접 해결할 수 있습니다. –

+0

위의 내용을 간결하게 번역하려면 위의 코드에서 코드가 표시되지 않았다고 제안하는 오류가 표시되지 않습니다. 먼저 오류를 격리해야하므로 [mcve]가 필요합니다. –

+0

가능한 유일한 문제는 새 pnlWagens 개체를 만드는 것이므로 올바른 개체를 업데이트하지 않는 것일 수 있습니다. –

답변

3

다음 pnlWagens1 오브젝트가 여전히 다른 참조를 변경하지 않습니다 로컬 클래스를 의미한다 무엇을 변경, 모든 관련 코드를이되는 가정 (그 UpdateGUI 당신이 가지고있는 패널을 참조하여 add 또는 remove를 사용하지 않습니다) 이전 개체를 참조하십시오. 이전 컨테이너 pnlWagens1은 원래 컨테이너에서 add이라고 불렀던 다른 위치에서 Swing에 의해 계속 참조됩니다. 당신이해야 할 일은

컨테이너에 모두 revalidate()repaint()를 호출 한 다음 지금하고있는 것처럼 컨테이너에 addpnlWagens1 재, pnlWagens1을 변경하고 전화, 컨테이너로부터 removepnlWagens1이다.

+0

그 일을 잘 했어! 실제로 컨테이너에서 제거하지 않을 생각이었습니다. 솔직히 참조가 변경되면 간단히 업데이트 될 것이라고 저는 믿습니다. 고맙습니다! – Yorrick

+0

@yorrick 문제가 없습니다. Java에서 참조는 값으로 전달됩니다. 메소드를 호출하고 참조를 전달하면 메소드는 실제로 참조 사본을 가져옵니다. – NESPowerGlove