Swing/MagneticFrame のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MagneticFrame へ行く。
- 1 (2007-01-01 (月) 08:38:12)
- 2 (2007-01-01 (月) 10:20:49)
- 3 (2007-01-02 (火) 18:05:01)
- 4 (2007-01-02 (火) 21:18:58)
- 5 (2007-01-02 (火) 23:36:18)
- 6 (2007-08-31 (金) 13:10:20)
- 7 (2009-06-22 (月) 12:27:29)
- 8 (2013-02-10 (日) 00:03:14)
- 9 (2013-10-16 (水) 14:15:27)
- 10 (2013-10-17 (木) 04:21:50)
- 11 (2015-02-10 (火) 15:30:35)
- 12 (2016-12-08 (木) 14:26:39)
- 13 (2017-11-15 (水) 21:10:41)
- 14 (2019-05-22 (水) 19:35:38)
- 15 (2019-07-17 (水) 14:50:36)
- 16 (2021-03-21 (日) 04:15:18)
TITLE:JDesktopPaneにJInternalFrameを吸着させる
JDesktopPaneにJInternalFrameを吸着させる
編集者:Terai Atsuhiro
作成日:2007-01-01
更新日:2021-03-21 (日) 04:15:18
概要
JDesktopPaneとJInternalFrameの距離が近くなった場合、これらを自動的に吸着させます。
#screenshot
サンプルコード
private class MagneticListener extends MouseInputAdapter { private final JInternalFrame frame; private final Point loc = new Point(); private static final int d = 10; public MagneticListener(JInternalFrame frame) { this.frame = frame; } public void mousePressed(MouseEvent e) { Point p1 = frame.getLocation(); Point p2 = SwingUtilities.convertPoint(frame, e.getPoint(), frame.getDesktopPane()); loc.setLocation(p2.x-p1.x, p2.y-p1.y); } public void mouseDragged(MouseEvent e) { JDesktopPane desktop = frame.getDesktopPane(); Point p = e.getPoint(); Point pp = SwingUtilities.convertPoint(frame, p.x-loc.x, p.y-loc.y, desktop); int xx = desktop.getSize().width -frame.getSize().width -pp.x; int yy = desktop.getSize().height-frame.getSize().height-pp.y; if(Math.abs(pp.x)>=d && Math.abs(pp.y)>=d && Math.abs(xx)>=d && Math.abs(yy)>=d) return; desktop.getDesktopManager().dragFrame( frame, (pp.x<xx)?((Math.abs(pp.x)<d)?0:pp.x):((Math.abs(xx)<d)?xx+pp.x:pp.x), (pp.y<yy)?((Math.abs(pp.y)<d)?0:pp.y):((Math.abs(yy)<d)?yy+pp.y:pp.y)); } }
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、JDesktopPaneとJInternalFrameの距離が10pt以下になった場合、DesktopManager#.dragFrame(JInternalFrame,int,int)メソッドを使ってJInternalFrameの位置を変更することで、吸着を行っています。