2014-10-01 54 views
0

我在JDesktopPane中有多個JInternalFrame(s)。所有的JInternalFrame(s)都是未修飾的,我使用鼠標監聽器來管理拖動。但是,我希望內部框架不重疊,即一個內部框架不應該與另一個相交。直到現在,我可以使用getBounds()。intersects()方法檢查兩個內部框架是否重疊。但是,我對接下來應該做什麼感到無能爲力。如何使JDesktopPane中的JInternalFrame不重疊

我試過谷歌但沒有得到滿意的答案。請提出解決方案。

謝謝!

回答

0

兩個答案:

  1. 如果您要設置其內部框架重疊,另外,使用setComponentZOrder(組件comp,INT指數)的功能。

例如

JDesktopPane desktopPane = new JDesktopPane(); 
contentPane.add(desktopPane); 
JInternalFrame internalFrame = new JInternalFrame("New JInternalFrame"); 
desktopPane.add(internalFrame); 
desktopPane.setComponentZOrder(internalFrame, 0); 

將setComponentZOrder函數放在JInternalFrame組件偵聽器中。

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

2.如果您希望它們嚴格不重疊,請將它們放置在單獨的jframe中。

+1

你的答案是創建一個新的頂級窗口?這似乎並不正確。我很確定他想要在1個頂級窗口中的所有內部框架 – 2015-02-06 23:35:41

+0

他/她明確提到他/她想要JDesktopPane中的JInternalFrame。我只是回答了這個問題,並據此作出了變數。這就是說,JInternalFrame的祖先是任意的,只要你使用setComponentZOrder。如果你想讓祖先成爲contentPane,可以使用contentPane.setComponentZOrder(internalFrame,0); – AliAvci 2015-02-07 01:29:03