/***************************************** 題目:拖曳畫三角形 說明:請在視窗上畫一三角形,其後拖曳任一頂點時,則可畫出另一三角 形,分別拖曳3頂點時,只有被拖曳頂點移動,其它頂點不能移動。 注意: 1. 三角形3頂點座標之取得須繼承abstract class Triangle,呼叫 之int [ ][ ] getxy() method。 2. getxy()傳回之二維陣列維數為 [3][2],列數代表3頂點, 欄數索引0:x座標,索引1:y座標。 *************************************************/ import java.awt.*; import javax.swing.*; import java.awt.event.*; //想想還有沒有其他的東西要import import javax.swing.event.*; //要多import這個 class act extends Triangle//繼承Triangle {} public class f7 extends JFrame implements MouseInputListener//名稱改一改 { Container c; //設定UI元件 //設定共用的變數與類別 int x1,y1,x2,y2,x3,y3; int mvpt;//紀錄被拖曳的點 public f7() //建構元,名稱改一改 { super("拖曳畫三角形"); c=getContentPane();//取得ContentPane //設定版面設定 c.setLayout(new FlowLayout(FlowLayout.CENTER));//設定為用flowlayout //初始化UI元件 int[][] xy; act tri=new act(); xy=tri.getxy(); x1=xy[0][0];//先設定一個基本的三角型 y1=xy[0][1]; x2=xy[1][0]; y2=xy[1][1]; x3=xy[2][0]; y3=xy[2][1]; 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[]) //程式起點 { f7 app=new f7(); //名稱改一改,啟動UI元件 app.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); //處理視窗關閉要求 } }