我创建了一个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可见,并且它确实有效。
为什么会这样?
答案 0 :(得分:1)
您是否在包含JInternalFrame,JDesktopPane的容器上调用repaint?如果没有,你应该。
答案 1 :(得分:1)
我会在ComponentListener
上使用JDesktopPane
并监听componentResized
事件。然后,只要桌面窗格大小发生更改,通过最大化/恢复或通过调整框架大小,您将收到通知。
答案 2 :(得分:1)
听起来你只是希望JInternalFrame遵循JFrame的状态。为什么不将JInternalFrame设置为最大化?
jInternalFrame.setMaximum( true );