2012-09-04 2 views
0

처음에는 setVisible (false)으로 설정 한 원하는 JPanel을 내 코드에 표시 할 수 없지만 일부 동작이 수행되면 가시성이 true로 설정되지만 화면에 표시되지 않습니다.jLayeredPane 내에서 Jpanel의 가시성 문제

setVisible을 true로 설정하더라도 초기에는 표시되지 않습니다. PasteBin에 코드를 첨부했습니다.

2 개의 레이어가있는 창 하나는 jLayeredPane1이고 다른 하나는 jLayeredPane2입니다. 이제 JLayeredPane1에는 recordingPanel과 reRecordingPanel이라는 두 개의 JPanel이 있습니다.

처음에 애플릿이로드 될 때 reRecordingPanel의 가시성은 setVisible (false)입니다. 녹음의 첫 번째 라운드가 완료되면 표시되고 visible 인 recordingPanel이 이제 보이지 않게됩니다. 이것은 잘 작동합니다.

내 문제는 그 안에 timerPanel 및 listeningPanel 들어있는 다른 JLayeredPanel 동일하게 싶습니다. 여기

문제입니다 : timerPanel의 가시성은 처음 사실이다하지만 사용자의 프레스 버튼을들을 때 그것이 보이지 않는해야 듣기 패널이 표시해야하지만 그렇지 않습니다!

내가 청취자를 볼 수는 없지만 그 사람의 시인성을 true로 설정했습니다. 앞에서 말했듯이 처음에는 가시성을 true로 설정하더라도 표시되지 않습니다.

내가 뭘 잘못 했니?

경쟁 조건과 관련이 있습니까?

문제는이 코드에

if (getCurrentState() == RecorderUI.LISTENING_STATE) { 

      // switch panel 
      this.timerPanel.setVisible(true); 
      this.listeningPanel.setVisible(false); 

      // switch button 
      this.reRecordingButton.setEnabled(true); 
      this.saveButton.setEnabled(true); 

      this.listenButton.setText("Listen"); 

      this.setCurrentState(NORMAL_STATE); 

      // according to player's state wise 
      this.closePlayer(); 

      log.info(" player closed "); 

     } else { 

      // switch panel 
      this.timerPanel.setVisible(false); 
      this.listeningPanel.setVisible(true); 

      log.info(" visibility of listeningPanel is " 
        + this.listeningPanel.isVisible()); 

      // switch button 
      this.reRecordingButton.setEnabled(false); 
      this.saveButton.setEnabled(false); 

      this.listenButton.setText("Close"); 

      this.setCurrentState(LISTENING_STATE); 

      this.startPlayer(); 

      log.info(" now playing "); 
     } 

    } 
+0

'(false)를'대신'timerPanel.setVisible (거짓)'의 this.timerpanel.setVisible? 나는 전에 그것을 본 적이 없다. – Pureferret

+0

@Pureferret'this'는 클래스의 현재 인스턴스를 참조합니다. 어떤 경우에는 클래스 매개 변수를 메소드 매개 변수 (일반적으로 set-method)에서 모호하게하는 데 도움이 될 수 있습니다. 다른 경우에도 사용됩니다 ... –

+0

@GuillaumePolet'this'는 어떻게 작동하는지 알고 있습니다 만'this.somethingElse.someMethod'는'this'에 속한 * public 변수 *'somethingElse'에'someMethod'를 수행한다고 말합니다 (또는이 경우 개인이 될 수 있습니다). 나는 네가이 일을 할 수 있다고 생각하지 않았다. 아마도 아침에 너무 이른 것 같습니다. – Pureferret

답변

0

난 마티스는 -1로 heigth 및 JPanel의 (listeningPanel)의 widht를 설정 한 -1이 표시되지 않는 이유가 발견 디버깅하면서 화면. 내가 수동으로 설정하여 해결했습니다.

당신에게 감사의 모든 이유는 당신이 사용하는