/*
* Test5.java
*
* Created on 2006年8月24日, 下午5:17
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package myTest;
/**
*
* @author 千里冰封
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test5 extends JPanel{
private JFrame jf;
private volatile boolean isHidden,isPressing;
private Show show;
private Hide hide;
private Image bg;
private int x1,y1;
/** Creates a new instance of Test5 */
public Test5() {
initOther();
initWindow();
}
private void initOther(){
bg=Toolkit.getDefaultToolkit().createImage(this.getClass().getResource("qq.jpg"));
MediaTracker mt=new MediaTracker(this);
mt.addImage(bg,0);
try{
mt.waitForAll();
} catch(Exception exe){
exe.printStackTrace();
}
this.setPreferredSize(new Dimension(bg.getWidth(this),bg.getHeight(this)));
}
private void initWindow(){
jf=new JFrame();
jf.add(this,BorderLayout.CENTER);
jf.setAlwaysOnTop(true);
jf.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent me){
if(isHidden){
isHidden=false;
new Show().start();
}
}
public void mouseExited(MouseEvent me){
if(jf.getY()<=0){
isHidden=true;
new Hide().start();
}
}
public void mousePressed(MouseEvent me){
if(!isPressing){
isPressing=true;
Rectangle rec=new Rectangle(0,0,165,23);
Point p=me.getPoint();
if(rec.contains(p)){
x1=me.getX();
y1=me.getY();
}
}
}
public void mouseReleased(MouseEvent me){
isPressing=false;
x1=0;
y1=0;
}
public void mouseClicked(MouseEvent me){
Rectangle rec=new Rectangle(166,5,16,18);
Rectangle close=new Rectangle(198,7,16,16);
Point p=me.getPoint();
if(rec.contains(p)){
jf.setExtendedState(JFrame.ICONIFIED);
} else if(close.contains(p)){
System.exit(0);
}
}
});
jf.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent me){
if(jf.getY()>=0){
Rectangle rec=new Rectangle(0,0,165,23);
Point p=me.getPoint();
if(rec.contains(p)){
int xx=p.x-x1;
int yy=p.y-y1;
jf.setLocation(jf.getX()+xx,jf.getY()+yy);
}
me.consume();
}
}
public void mouseMoved(MouseEvent me){
Rectangle rec=new Rectangle(166,5,16,18);
Rectangle close=new Rectangle(198,7,16,16);
Point p=me.getPoint();
if(rec.contains(p)||close.contains(p)){
jf.setCursor(new Cursor(Cursor.HAND_CURSOR));
} else{
jf.setCursor(Cursor.getDefaultCursor());
}
}
});
jf.setUndecorated(true);
jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paintComponent(Graphics g){
g.drawImage(bg,0,0,this);
}
private class Show extends Thread{
int y=jf.getY();
int x=jf.getX();
volatile boolean go;
public void run(){
go=true;
while(go){
try{
Thread.sleep(10);
y+=40;
jf.setLocation(x,y);
if(y>=0){
y=0;
jf.setLocation(x,y);
break;
}
} catch(Exception exe){
exe.printStackTrace();
}
}
}
public void stops(){
go=false;
}
}
private class Hide extends Thread{
int x=jf.getX();
int y=jf.getY();
int height=jf.getHeight();
volatile boolean go;
public void run(){
go=true;
while(go){
try{
Thread.sleep(10);
y-=40;
jf.setLocation(x,y);
if(y+height<=5){
y=5-height;
jf.setLocation(x,y);
break;
}