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();
}
}