私のコードは、最初に setVisible(false) を持つ目的の JPanel を表示できませんが、何らかのアクションが実行されると、その可視性は true に設定されますが、画面には表示されません。
最初に setVisible を true に設定しても表示されません。ここにPasteBinのコードを添付しました
2 つのレイヤード ペインがあり、1 つは jLayeredPane1 で、もう 1 つは jLayeredPane2 です。現在、JLayeredPane1 には、recordingPanel と reRecordingPanel の 2 つの JPanel があります。
最初にアプレットがロードされたとき、reRecordingPanel の可視性は setVisible(false) です。記録の最初のラウンドが完了すると、それが表示され、表示されていた recordingPanel が非表示になります。これはうまくいっています。
私の問題は、その中に timerPanel と listenPanel を含む他の JLayeredPanel でも同じことをしたいということです。
ここに問題があります: timerPanel の可視性は最初は true ですが、ユーザーが Listen ボタンを押すと非表示になり、Listening 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 ");
}
}