为什么JInternalFrame的setSize不起作用

时间:2011-11-15 11:49:04

标签: java swing jinternalframe jdesktoppane

我创建了一个JFrame,并将一个JDesktopPane添加到JFrame中,然后将JInternalFrame添加到JDesktopPane中,JInternalFrame的初始大小与JDesktopPane相同。当JFrame最大化时,JDesktopPane也将最大化,但JInternalFrame未最大化。我希望JFrame最大化时JInternalFrame最大化,所以我为JFrame添加一个WindowStateListener,当JFrame最大化时,我将调用JInternalFrame的setSize方法使JInternalFrame的大小与JDesktopPane相同,代码如下:

addWindowStateListener(new java.awt.event.WindowStateListener() {

   public void windowStateChanged(java.awt.event.WindowEvent evt) {
       jInternalFrame.setSize(jDesktopPane1.getWidth(), 
           jDesktopPane1.getHeight());
   }
});

但它不起作用。但是,当我单击以最大化JFrame,然后单击以最小化JFrame,然后单击任务栏以使JFrame可见,并且它确实有效。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

您是否在包含JInternalFrame,JDesktopPane的容器上调用repaint?如果没有,你应该。

答案 1 :(得分:1)

我会在ComponentListener上使用JDesktopPane并监听componentResized事件。然后,只要桌面窗格大小发生更改,通过最大化/恢复或通过调整框架大小,您将收到通知。

答案 2 :(得分:1)

听起来你只是希望JInternalFrame遵循JFrame的状态。为什么不将JInternalFrame设置为最大化?

jInternalFrame.setMaximum( true );