1樓
大 中
小 發表於 2006-8-7 20:39
[JAVA] 展示滑鼠事件處理
引用:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ui8 extends JFrame
{
Image img;
int imgpt=52;
int x,y;
public ui8()
{
super("滑鼠事件處理");
// 弄一張圖來娛樂一下
img=Toolkit.getDefaultToolkit().createImage("bridge/"+imgpt+".GIF");
//設定滑鼠事件處理程式
addMouseMotionListener(new procmouse());
addMouseListener(new checkmouse());
setSize(600,480);
x=100;
y=100;
show();
}
public void paint(Graphics g)
{
super.paint(g);
g.drawImage(img, x,y, this);//跟著滑鼠畫出圖
}
/*****實作滑鼠移動事件處理物件 *******/
class procmouse extends MouseMotionAdapter
{
/*****實作滑鼠移動事件處理方法 *******/
public void mouseMoved(MouseEvent e)
{
//取得X Y座標
x=e.getX();
y=e.getY();
if (y>80) //太上面就不要show了
repaint();
}
}
/*****實作滑鼠事件處理物件 *******/
class checkmouse extends MouseAdapter
{
/*****實作滑鼠事件處理程式 *******/
public void mouseClicked(MouseEvent e)
{
int button=e.getButton(); //JDK 1.3不認識左右鍵
if (button==e.BUTTON1) //左鍵換牌
{
imgpt=imgpt+1;
if (imgpt>52) imgpt=10;
}
else if (button==e.BUTTON3) //右鍵換牌
{
imgpt=imgpt-1;
if (imgpt<10) imgpt=52;
}
//重新抓圖
img=Toolkit.getDefaultToolkit().createImage("bridge/"+imgpt+".GIF");
repaint(); //重新顯示一次
}
}
public static void main(String args[]) //程式起點
{
ui8 app=new ui8(); //畫圖
//處理視窗關閉要求
app.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0);}
});
}
} 引用:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ui9a extends JFrame implements ActionListener
{
Image img;
int imgpt=52;
int x,y;
Timer timer;
public ui9a()
{
super("滑鼠事件處理");
// 弄一張圖來娛樂一下
img=Toolkit.getDefaultToolkit().createImage("bridge/"+imgpt+".GIF");
//設定滑鼠事件處理程式
addMouseMotionListener(new procmouse());
addMouseListener(new checkmouse());
setSize(600,480);
x=100;
y=100;
timer=new Timer(1000,this);//設定 timer
timer.start(); //啟動 timer
show();
}
public void paint(Graphics g)
{
super.paint(g);
g.drawImage(img, x,y, this);//跟著滑鼠畫出圖
}
//實作 Timer 事件
/**這個method就是每次timer啟動時呼叫的method**/
public void actionPerformed(ActionEvent e)
{
x=x-20;
y=y-5;
if (x<40) x=550;//太左邊
if (y<100) y=480;//太上面
repaint(); //由於要呼叫 repaint(),所以必須把呼叫物件指標送過來
}
/*****實作滑鼠移動事件處理物件 *******/
class procmouse extends MouseMotionAdapter
{
/*****實作滑鼠移動事件處理方法 *******/
public void mouseDragged(MouseEvent e)
{
//取得X Y座標
x=e.getX();
y=e.getY();
if (y>80) //太上面就不要show了
repaint();
}
}
/*****實作滑鼠事件處理物件 *******/
class checkmouse extends MouseAdapter
{
/*****實作滑鼠事件處理程式 *******/
public void mouseClicked(MouseEvent e)
{
int button=e.getButton(); //JDK 1.3不認識左右鍵
if (button==e.BUTTON1) //左鍵換牌
{
imgpt=imgpt+1;
if (imgpt>52) imgpt=10;
}
else if (button==e.BUTTON3) //右鍵換牌
{
imgpt=imgpt-1;
if (imgpt<10) imgpt=52;
}
//重新抓圖
img=Toolkit.getDefaultToolkit().createImage("bridge/"+imgpt+".GIF");
repaint(); //重新顯示一次
}
/**用滑鼠按鍵的狀態來控制Timer是否運作**/
public void mousePressed(MouseEvent e)
{
timer.stop(); //進入拖曳,停止timer
}
public void mouseReleased(MouseEvent e)
{
timer.start();//離開拖曳,開始timer
}
}
public static void main(String args[]) //程式起點
{
ui9a app=new ui9a(); //畫圖
//處理視窗關閉要求
app.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0);}
});
}
}
|