Swing/DockingFrames の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/DockingFrames へ行く。
- Swing/DockingFrames の差分を削除
--- category: swing folder: DockingFrames title: JFrameの移動を同期 tags: [JFrame, ComponentListener] author: aterai pubdate: 2005-07-04T07:42:08+09:00 description: JFrameを2つ並べて作成し、その位置関係を保ったまま移動できるようにします。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTLtEL3M0I/AAAAAAAAAYA/9HmyXI1Uw0M/s800/DockingFrames.png --- * 概要 [#summary] `JFrame`を`2`つ並べて作成し、その位置関係を保ったまま移動できるようにします。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTLtEL3M0I/AAAAAAAAAYA/9HmyXI1Uw0M/s800/DockingFrames.png) * サンプルコード [#sourcecode] #code(link){{ private void positionFrames(ComponentEvent e) { if (e.getComponent().equals(frame1)) { int x = frame1.getBounds().x; int y = frame1.getBounds().y + frame1.getBounds().height; frame2.removeComponentListener(this); frame2.setLocation(x, y); frame2.addComponentListener(this); } else { int x = frame2.getBounds().x; int y = frame2.getBounds().y - frame1.getBounds().height; frame1.removeComponentListener(this); frame1.setLocation(x, y); frame1.addComponentListener(this); } } }} * 解説 [#explanation] 上記のサンプルでは、`JFrame`を上下に並べてそれぞれに`ComponentListener`を実装したリスナーを追加しています。片方のフレームが移動された時、残りのフレームの位置を指定する前に一旦このリスナーを削除することで処理ループの発生を防止しています。 - `JFrame`を上下に並べてそれぞれに`ComponentListener`を実装したリスナーを追加 - 片方のフレームが移動された時、残りのフレームの位置を指定する前に一旦このリスナーを削除することで処理ループの発生を防止 * 参考リンク [#reference] - [https://community.oracle.com/thread/1479997 Swing (Archive) - how to dock two jdialogs?] - [https://community.oracle.com/thread/1492552 Swing (Archive) - how to catch drag event in the title bar of a jframe] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/event/ComponentListener.html ComponentListener (Java Platform SE 8)] * コメント [#comment] #comment #comment