0

私のコードは、最初に 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 ");
        }

    }
4

1 に答える 1

0

デバッグ中に、マティスが jPanel (listeningPanel) の高さと幅を -1、-1 に設定していることがわかったため、画面に表示されません。手動で設定して解決しました

皆さん、ありがとうございました

于 2012-09-04T11:49:40.093 に答える