2011-06-03 10 views
0

我想創建一個只能在其父框架內浮動的JDialog。那就是它不能從它的父框架中拖出來。任何想法?鼠標移動偵聽器?如何創建一個只能在其父框架內浮動的JDialog

感謝,

編輯:

  1. 我的應用程序了基於幀而不是內部框架,所以我不能使用JInternalFrame
  2. 我需要一個無模式對話框的話,我無法使用JOptionPane具有內部功能。

回答

0

好的,你應該在最初的問題中指定「隱藏」的問題。

我已經找到一個非常棘手的解決方案,我不建議使用它,除非開發一個更好的解決方案,或許從這個開始。 給定一個JInternalFrame,給它提供一個componentMove監聽器來禁止將它移動到隱藏位置。 據我測試它,它有刷新問題(也許他們可以解決)和極端情況下的穩定性來評估。 「原樣」用於進一步的改進,而不是作爲一個很好的軟件:-)

public void componentMoved(ComponentEvent e) { 

       Rectangle r = new Rectangle(); 

       MyInternalFrame mif = MyInternalFrame.this; 
       JDesktopPane dp = mif.getDesktopPane(); 

       if (mif.getX() + mif.getWidth()> dp.getWidth()) { 
        mif.setLocation(mif.getDesktopPane().getWidth()-mif.getWidth(),mif.getY()); 
       } 

       if (mif.getY() + mif.getHeight()> dp.getHeight()) { 
        mif.setLocation(mif.getX(), mif.getDesktopPane().getHeight()-mif.getHeight()); 
       } 

       if (mif.getX()<0) { 
        mif.setLocation(0, mif.getY()); 
       } 

       if (mif.getY()<0) { 
        mif.setLocation(mif.getX(), 0); 
       } 

      } 

     }); 
4

改爲使用JInternalFrame。例如,請參見this page

+0

是的,但InternalFrame可以完全隱藏在它的父框架的邊緣。任何方式來避免這種情況?我不希望內部框架或浮動對話框的部分或完全由其父框架隱藏。這意味着內部框架或對話框的左側邊框不能超出其父框架的左側邊框。 – 5YrsLaterDBA 2011-06-03 15:13:39

+0

@ 5YrsLaterDBA:查看[JOptionPane](http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html)中包含字符串'internal'的方法。 – 2011-06-03 15:24:19

+0

請參閱上面的修改。我不能使用JOptionPane,因爲我需要一個非模態對話框來顯示一些接收到的數據。 – 5YrsLaterDBA 2011-06-03 16:05:12

相關問題