Java 如何使JDesktopPane中的JInternalFrame不重叠

Java 如何使JDesktopPane中的JInternalFrame不重叠,java,overlapping,jinternalframe,jdesktoppane,Java,Overlapping,Jinternalframe,Jdesktoppane,我在一个JDesktopPane中有多个JInternalFrame。所有JInternalFrame都是未修饰的,我使用鼠标侦听器管理拖动。但是,我希望内部帧不重叠,即一个内部帧不应与另一个内部帧相交 到目前为止,我可以使用getBounds().intersects()方法检查两个内部帧是否重叠。然而,我不知道下一步该怎么办 我试过谷歌,但没有得到满意的答案。请提出解决办法 谢谢大家! 两个答案: 如果要设置哪个内部帧与另一帧重叠,请使用setComponentZOrder(组件comp,i

我在一个JDesktopPane中有多个JInternalFrame。所有JInternalFrame都是未修饰的,我使用鼠标侦听器管理拖动。但是,我希望内部帧不重叠,即一个内部帧不应与另一个内部帧相交

到目前为止,我可以使用getBounds().intersects()方法检查两个内部帧是否重叠。然而,我不知道下一步该怎么办

我试过谷歌,但没有得到满意的答案。请提出解决办法


谢谢大家!

两个答案:

  • 如果要设置哪个内部帧与另一帧重叠,请使用setComponentZOrder(组件comp,int index)函数
  • e、 g

    将setComponentZOrder函数放在JInternalFrame组件侦听器中

        internalFrame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentMoved(ComponentEvent e) {
                desktopPane.setComponentZOrder(internalFrame, 0);
            }
        });
    

    二,。如果您希望它们严格地不重叠,请将它们放在单独的JFrame中。

    您的答案是创建一个新的顶级窗口?这似乎根本不对。我很确定他想要一个顶级窗口中的所有内部框架他/她明确提到他/她想要JDesktopPane中的JInternalFrame。我只是简单地回答了这个问题,并相应地设置了变量。也就是说,JInternalFrame的祖先是任意的,只要您使用setComponentZOrder。如果希望祖先是contentPane,请执行contentPane.setComponentZOrder(internalFrame,0);
        internalFrame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentMoved(ComponentEvent e) {
                desktopPane.setComponentZOrder(internalFrame, 0);
            }
        });