我的代码无法显示最初具有setVisible(false)的所需JPanel,但是当执行某些操作时,其可见性将设置为true,但不会显示在屏幕上。
即使我最初将setVisible设置为true也不会显示。我已将代码附加到PasteBin here
上有2个分层窗格,一个是jLayeredPane1,另一个是jLayeredPane2。现在,在JLayeredPane1中有两个JPanel,即recordingPanel和reRecordingPanel。
最初加载applet时,reRecordingPanel的可见性为setVisible(false)。当第一轮录制完成后,它变得可见,并且可见的recordingPanel现在变得不可见。这很好。
我的问题是我想在其他JLayeredPanel上做同样的事情,其中包含timerPanel和listenPanel。
以下是问题:timerPanel的可见性最初为,但是当用户按下Listen按钮时,它应该是不可见的,并且应该可以看到Panel ,但事实并非如此!
虽然我已将其可见性设置为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 :(得分:0)
在调试时我发现matisse已将jPanel(listenPanel)的高度和宽度设置为-1,-1,这就是为什么它没有显示在屏幕上。我通过手动设置解决了这个问题。
谢谢大家