/***************************************** 題目:拖曳畫三角形 說明:請在視窗上畫一三角形,其後拖曳任一頂點時,則可畫出另一三角 形,分別拖曳3頂點時,只有被拖曳頂點移動,其它頂點不能移動。 *************************************************/ import java.awt.*; import javax.swing.*; import java.awt.event.*; //想想還有沒有其他的東西要import import javax.swing.event.*; //要多import這個 public class p7 extends JFrame implements MouseInputListener//名稱改一改 { Container c; //設定UI元件 //設定共用的變數與類別 int x1,y1,x2,y2,x3,y3; int mvpt;//紀錄被拖曳的點 public p7() //建構元,名稱改一改 { super("拖曳畫三角形"); c=getContentPane();//取得ContentPane //設定版面設定 c.setLayout(new FlowLayout(FlowLayout.CENTER));//設定為用flowlayout //初始化UI元件 x1=450;//先設定一個基本的三角型 y1=200; x2=250; y2=125; x3=350; y3=200; mvpt=0; //設定UI元件與滑鼠的事件觸發傾聽者 addMouseListener(this); addMouseMotionListener(this); setSize(640,480);//設定size,顯示出去 setVisible(true); } public void paint(Graphics g) { super.paint(g);//畫出元件 //額外的畫圖程式寫在這裡,畫三角型 g.drawLine(x1,y1,x2,y2); g.drawLine(x2,y2,x3,y3); g.drawLine(x1,y1,x3,y3); } //UI元件事件處理類別寫在這裡 //滑鼠事件處理類別寫在這裡 /*****實作滑鼠移動事件處理物件 *******/ /*****實作滑鼠移動事件處理方法 *******/ public void mouseClicked(MouseEvent e){}; public void mouseEntered(MouseEvent e){}; public void mouseExited(MouseEvent e){}; public void mousePressed(MouseEvent e) { int dist1,dist2,dist3,nowx,nowy; nowx=e.getX(); nowy=e.getY(); dist1=(x1-nowx)*(x1-nowx)+(y1-nowy)*(y1-nowy); dist2=(x2-nowx)*(x2-nowx)+(y2-nowy)*(y2-nowy); dist3=(x3-nowx)*(x3-nowx)+(y3-nowy)*(y3-nowy); if (dist1<=25)//滑鼠和第一頂點距離很近 mvpt=1; else if (dist2<=25)//滑鼠和第二頂點距離很近 mvpt=2; else if (dist3<=25)//滑鼠和第三頂點距離很近 mvpt=3; repaint(); } public void mouseReleased(MouseEvent e) { mvpt=0; }; public void mouseMoved(MouseEvent e){}; public void mouseDragged(MouseEvent e) { if (mvpt==1)//拖曳點是第一點 { x1=e.getX(); y1=e.getY(); } else if (mvpt==2)//拖曳點是第二點 { x2=e.getX(); y2=e.getY(); } else if (mvpt==3)//拖曳點是第三點 { x3=e.getX(); y3=e.getY(); } repaint(); } /***主程式***/ public static void main(String args[]) //程式起點 { p7 app=new p7(); //名稱改一改,啟動UI元件 app.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); //處理視窗關閉要求 } }