用Java线程实现Dock高级停靠技术

package aaa.test;

 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;

 

//注意此程序运行前,须先将winXP"我的电脑"中的性能调为最佳外观(仅仅为了让窗口能随鼠标实时移动)方可正常运行
public class MyDockInJava {
 final static JFrame byFrame = new JFrame("i'm slave ");
 final static JFrame mainFrame = new JFrame("我重现江湖,议论纷纷,纵横古今... ");
 static boolean mainFrameActivated = false;
 static boolean byFrameActivated = false;

 private static class MyDock implements Runnable {

  public void run() {

   boolean joined = true;
   while (true) {
    while (byFrameActivated) {
     try {
      Thread.sleep(200);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }

     if (Math.abs((byFrame.getBounds()).x
       - ((mainFrame.getBounds()).x + (mainFrame
         .getBounds()).width)) <= 15) {

      byFrame.setBounds(
        ((mainFrame.getBounds()).x + (mainFrame
          .getBounds()).width), (mainFrame
          .getBounds()).y,
        (byFrame.getBounds()).width, (byFrame
          .getBounds()).height);
      joined = true;
     } else {
      joined = false;

     }
    }
    while (mainFrameActivated && joined) {
     if ((Math.abs((byFrame.getBounds()).x
       - ((mainFrame.getBounds()).x + (mainFrame
         .getBounds()).width)) > 0)
       || (Math.abs((byFrame.getBounds()).y
         - ((mainFrame.getBounds()).y)) > 0)) {
      byFrame.setBounds(
        ((mainFrame.getBounds()).x + (mainFrame
          .getBounds()).width), (mainFrame
          .getBounds()).y,
        (byFrame.getBounds()).width, (byFrame
          .getBounds()).height);

     }

    }

   }

  }
 }

 private static void start() {

  mainFrame.setBounds(200, 160, 230, 420);
  Rectangle mainFrameRec = mainFrame.getBounds();
  mainFrame.getContentPane().setBackground(Color.GREEN);
  mainFrame.setLayout(new BorderLayout());
  mainFrame.addWindowListener(new WindowAdapter() {

   public void windowActivated(WindowEvent e) {
    mainFrameActivated = true;

   }

   public void windowClosing(WindowEvent e) {
    mainFrameActivated = false;
    System.exit(0);

   }

   public void windowDeactivated(WindowEvent e) {
    mainFrameActivated = false;

   }

  });
  mainFrame.setVisible(true);

  byFrame.setBounds((mainFrameRec.x + mainFrameRec.width),
    mainFrameRec.y, 200, 400);
  byFrame.addWindowListener(new WindowAdapter() {

   public void windowActivated(WindowEvent e) {
    byFrameActivated = true;

   }

   public void windowDeactivated(WindowEvent e) {
    byFrameActivated = false;

   }

   public void windowClosing(WindowEvent e) {
    byFrameActivated = false;
    byFrame.dispose();

   }

  });
  byFrame.setResizable(false);
  byFrame.setVisible(true);

 }

 public static void main(String[] args) {
  start();
  new Thread(new MyDock()).start();

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值