Jpanel在jLayeredPane中的可见性问题

时间:2012-09-04 08:26:10

标签: java swing

我的代码无法显示最初具有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 ");
        }

    }

1 个答案:

答案 0 :(得分:0)

在调试时我发现matisse已将jPanel(listenPanel)的高度和宽度设置为-1,-1,这就是为什么它没有显示在屏幕上。我通过手动设置解决了这个问题。

谢谢大家