TITLE:JDesktopPaneにJInternalFrameを吸着させる

JDesktopPaneにJInternalFrameを吸着させる

編集者:Terai Atsuhiro
作成日:2007-01-01
更新日:2021-03-21 (日) 04:15:18

概要

JDesktopPaneとJInternalFrameの距離が近くなった場合、これらを自動的に吸着させます。

#screenshot

サンプルコード

 desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
 desktop.setDesktopManager(new DefaultDesktopManager() {
   //@override
   public void dragFrame(JComponent frame, int x, int y) {
     int e = x; int n = y;
     int w = desktop.getSize().width -frame.getSize().width -e;
     int s = desktop.getSize().height-frame.getSize().height-n;
     if(isNear(e) || isNear(n) || isNear(w) || isNear(s)) {
       x = (e<w)?(isNear(e)?0:e):(isNear(w)?w+e:e);
       y = (n<s)?(isNear(n)?0:n):(isNear(s)?s+n:n);
     }
     super.dragFrame(frame, x, y);
   }
   private boolean isNear(int c) {
     return (Math.abs(c)<10);
   }
 });
  • &jnlp;
  • &jar;
  • &zip;

解説

DesktopManager#dragFrame(JInternalFrame,int,int)メソッドをオーバーライドすることでJInternalFrameの位置を調整しています。上記のサンプルでは、JDesktopPaneとJInternalFrameの距離が10pt以下になった場合、それぞれ吸着するよう設定しています。

コメント