/***************************************** 展示Thread *************************************************/ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ui35 { ImageIcon imgi2,imgi1; int imgpt=52; int x,y,x1,y1; cmove c1,c2; JFrame f = new JFrame("Thread"); JLabel lab1,lab2; Container c; public ui35() { // 弄一張圖來娛樂一下 imgi1=new ImageIcon(Toolkit.getDefaultToolkit().createImage("bridge/02.GIF")); imgi2=new ImageIcon(Toolkit.getDefaultToolkit().createImage("bridge/03.GIF")); lab1=new JLabel(imgi1); lab2=new JLabel(imgi2); //設定滑鼠事件處理程式 f.addMouseMotionListener(new procmouse()); c=f.getContentPane(); f.setSize(600,480); c.setLayout(null);//取消版面設定 x=100;x1=300; y=100;y1=200; lab1.setBounds(x,y,100,100); lab2.setBounds(x1,y1,100,100); c.add(lab1); c.add(lab2); c1=new cmove(1); c2=new cmove(0); c1.start(); c2.start(); //設定關閉視窗,因為不是繼承JFrame,所以必須另外處理 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } class cmove extends Thread { private int pt=0,meet_cnt=0; public cmove(int inp) { pt=inp; } public void run()//真正的執行緒 { while (true) //不寫這行,run一次就結束了 { if (pt==1) { x1=x1-10; if (x1<0) x1=400; System.out.println("X1="+x1); lab2.setBounds(x1,y1,100,100); } else { x=x+10; if (x>400) x=0; System.out.println("X="+x); lab1.setBounds(x,y,100,100); } f.repaint(); try { sleep(200); //delay 0.2s } catch (InterruptedException e) { System.out.println("Interruped!"); } }//while(true) }//run } /*****實作滑鼠移動事件處理物件 *******/ class procmouse extends MouseMotionAdapter { /*****實作滑鼠拖曳事件處理方法 *******/ public void mouseDragged(MouseEvent e) { //取得X Y座標 x=e.getX(); y=e.getY(); lab1.setBounds(x,y,100,100); if (y>80) //太上面就不要show了 f.repaint(); } /*****實作滑鼠移動事件處理方法 *******/ public void mouseMoved(MouseEvent e1) { //取得X Y座標 x1=e1.getX(); y1=e1.getY(); lab2.setBounds(x1,y1,100,100); if (y1>80) //太上面就不要show了 f.repaint(); } } public static void main(String args[]) //程式起點 { ui35 app=new ui35(); //畫圖 } }