Java swing中的全屏开窗系统

Java swing中的全屏开窗系统,java,swing,Java,Swing,我正在开发一个应用程序,它需要能够在单个监视器和多个监视器上运行。我目前只知道实现我所需要的两种方法,这两种方法都不理想 如果我在所有监视器上创建一个JFrame,我就可以将JinternalFrame用于我的可移动窗口。缺点是,当我在不同大小/分辨率的监视器上时,这种方法不起作用,因为工具栏或我添加到JFrame中的其他任何东西都无法对齐,我可能会留下一些操作系统 另一种方法是为每个图形设备创建一个新的JFrame,并使用JDialogs作为我的窗口。这里的缺点是我对JDialogs的控制较少

我正在开发一个应用程序,它需要能够在单个监视器和多个监视器上运行。我目前只知道实现我所需要的两种方法,这两种方法都不理想

如果我在所有监视器上创建一个JFrame,我就可以将JinternalFrame用于我的可移动窗口。缺点是,当我在不同大小/分辨率的监视器上时,这种方法不起作用,因为工具栏或我添加到JFrame中的其他任何东西都无法对齐,我可能会留下一些操作系统

另一种方法是为每个图形设备创建一个新的JFrame,并使用JDialogs作为我的窗口。这里的缺点是我对JDialogs的控制较少,无法限制移动。理想情况下,我希望能够约束JDialog的位置,这样它就不会与我的工具栏重叠


有更好的方法吗?

您可以使用后一种方法,只需在每个JDialogs中添加一个ComponentListener:

final JDialog dialog = new JDialog();
dialog.addComponentListener(new ComponentAdapter()
{
    @Override
    public void componentMoved(ComponentEvent e)
    {
        if (dialog.getBounds().intersects(toolbar.getBounds()))
            moveToAvoidConflict(dialog);
    }
}

而您的
moveToAvoidConflict()
方法将向上、向下、向左移动对话框,或者正确,这样它就不再与工具栏相交。

为什么不能为每个带有JInternalFrame的图形设备使用JFrames?如果不进行一些黑客操作,切换拥有每个JInternalFrame的JDesktopPane,我将无法在屏幕之间移动窗口。除非我弄错了,而且很容易做到。看看吧。这可能行得通,但我现在能想到的唯一缺点是无法将窗口同时拆分为两个屏幕。当工具栏浮动时,这不起作用。当工具栏垂直以允许JDialog在屏幕上移动时,我也不得不忽略这一点。我认为这会破坏将窗口保持在工具栏后面的目的。