1. 程式人生 > >JAVA作業 視窗響應滑鼠事件:滑鼠在畫布上畫圓

JAVA作業 視窗響應滑鼠事件:滑鼠在畫布上畫圓

題目:生成一個視窗響應滑鼠事件,可以拖住滑鼠在畫布上畫出藍色的圓。滑鼠按下和彈起的位置為圓的直徑。


思想:

1、編寫框架類與畫布類即可實現畫板系列問題;

2、編寫Circle類,用於描述圓物件,因此屬性為int x1, y1, x2, y2表示滑鼠按下和彈起的位置,Color color表示圓的顏色;

3、DrawFrame類負責提供檢視,使用者可通過此類GUI看到畫板。

4、DrawTable類負責實現畫布,用於監控使用者滑鼠操作,儲存使用者畫出的圓並時刻重新整理顯示;屬性為int x1, y1, x2, y2表示滑鼠按下和彈起的位置,Vector<Circle> vectorCircle 用於儲存使用者所有畫過的圓;

原始碼:

Circle.java

package drawCircle;

import java.awt.Color;
import java.awt.Graphics;

/**
* @author TX
* @version 建立時間:2016年12月3日 下午2:54:54
* 類說明:圓類
*/
public class Circle {
	int x1, y1, x2, y2;
	Color color = Color.blue;
	public Circle(int x1, int y1, int x2, int y2)
	{
		this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2;
	}
    void draw(Graphics g){
    	        g.setColor(color);
		g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2));
	}
}
DrawFrame.java
package drawCircle;

import javax.swing.JFrame;

/**
* @author TX
* @version 建立時間:2016年12月3日 下午3:10:40
* 類說明:JFrame框架類
*/
public class DrawFrame extends JFrame{
	private DrawTable drawTable;
	public DrawFrame(String s)
	{
		super(s);
		drawTable = new DrawTable();
		this.add(drawTable);
	}
	
	public static void main(String[] args) {
		DrawFrame drawCir = new DrawFrame("畫圓");
		drawCir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		drawCir.setSize(550, 450);
		drawCir.setLocation(400, 100);
		drawCir.setVisible(true);
	}
}
DrawTable.java
package drawCircle;

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import javax.swing.JPanel;
/**
* @author TX
* @version 建立時間:2016年12月3日 下午2:30:24
* 類說明:JPanel畫板類
*/
public class DrawTable  extends JPanel{

	int x1, y1, x2, y2;
	Vector<Circle> vectorCircle = new Vector<Circle>();
	public DrawTable()
	{
		JPanel panel = new JPanel();
		addMouseListener(new MouseListener()
		{
			public void mousePressed(MouseEvent e)
			{
				x1 = e.getX();
				y1 = e.getY();
				Circle c = new Circle(x1,y1,x1,y1);
				vectorCircle.add(c);
			}//當用戶按下滑鼠按鈕時發生
			public void mouseReleased(MouseEvent e)
			{
			}//當用戶鬆開滑鼠按鈕時發生
			
			public void mouseClicked(MouseEvent e) {
			}
			
			public void mouseEntered(MouseEvent e) {
			}
			
			public void mouseExited(MouseEvent e) {
			}
		}
        );
		addMouseMotionListener(new MouseMotionListener()
		{
			public void mouseMoved(MouseEvent e)
			{
			}//當用戶按下滑鼠按鈕並在鬆開之前進行移動時發生

			public void mouseDragged(MouseEvent e)
			{
				vectorCircle.get(vectorCircle.size()-1).x2 = e.getX();
				vectorCircle.get(vectorCircle.size()-1).y2 = e.getY();
		    	repaint();
			}//當滑鼠在元件上移動而 不時拖動時發生
		}
		);
	}
	protected void paintComponent(Graphics g){
		g.clearRect(0, 0, getWidth(), getHeight());
		for(int i = 0; i < vectorCircle.size(); i++)	
		{
			vectorCircle.get(i).draw(g);
	    }
	}
}



相關推薦

JAVA作業 視窗響應滑鼠事件滑鼠畫布

題目:生成一個視窗響應滑鼠事件,可以拖住滑鼠在畫布上畫出藍色的圓。滑鼠按下和彈起的位置為圓的直徑。 思想: 1、編寫框架類與畫布類即可實現畫板系列問題; 2、編寫Circle類,用於描述圓物件,因

JS onmouseover滑鼠事件滑鼠移到小圖顯示大圖

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <

JS中的事件滑鼠、鍵盤、HTML事件

<body> <div> <img class="a" src="../../img/new_01" alt=""> <img class="a" src="../../img/new_02"

WPF,強制捕獲滑鼠事件滑鼠移出控制元件外依然可以執行強制捕獲的滑鼠事件

原文: WPF,強制捕獲滑鼠事件,滑鼠移出控制元件外依然可以執行強制捕獲的滑鼠事件 在WPF中,只有滑鼠位置在某個控制元件上的時候才會觸發該控制元件的滑鼠事件。例如,有兩個控制元件都註冊了MouseDown和MouseUp事件,在控制元件1上按下滑鼠,不要放開,移動到控制元件2上再放開。在這個過程中,控制元

瀏覽器滑塊、滑鼠事件滑鼠滑輪、鍵盤事件詳細說明

滑鼠滑輪 必須是在 mousewheel 事件中 註冊事件   window.addEventListener(“mousewheel ”,function(){}); event.deltaY   獲取滑輪沒一格滑動的畫素,正負表示變化趨勢,正增加 event.whee

視窗滑鼠事件響應滑鼠視窗中繪製矩形的程式

這裡主要是訓練怎麼去響應滑鼠響應事件,那怎麼去定義滑鼠響應函式呢? void CvMouseCallback( int event;//滑鼠響應事件的型別如滑鼠右鍵彈起,右鍵按下,CV_EVENT_LBUTTONDOWN,CV_EVENT_LBUTTONDOWN) int

Qt呼叫vlc的sdk時播放視窗不能響應滑鼠事件

最近在用vlc的sdk時發現Vlc在Qt中以sdk方式呼叫時,會出現播放的控制元件滑鼠事件失效。解決的辦法: // First step is start a timer when you play a video,// Second step : in the timer

java滑鼠事件監視

 import java.awt.*; import java.awt.event.*; public class example1 {  public static void main(String[] args){   Frame f=new

前端(十五)—— JavaScript事件繫結事件方式、事件的冒泡和預設事件滑鼠事件、鍵盤事件、表單 事件、文件事件、圖片事件、頁面事件

JS事件:繫結事件方式、事件的冒泡和預設事件、滑鼠事件、鍵盤事件、表單 事件、文件事件、圖片事件、頁面事件 一、事件的兩種繫結方式 ******* 1、on事件繫結方式 document.onclick = function() { console.log("文件點選"); } // on事件只

QT練手專案二滑鼠拖動視窗

     對於一個沒有邊框的視窗,滑鼠是無法將它拖動的,於是我們就需要自己重寫滑鼠的點選、移動和釋放事件來跟蹤滑鼠,從而 達到使用滑鼠拖動視窗,這裡我們就簡單的使用一個mainwindow來演示。這個小專案程式碼非常少,適合用來入門QT。 &nb

python+selenium三滑鼠事件與鍵盤事件 python+selenium三滑鼠事件與鍵盤事件

python+selenium三:滑鼠事件與鍵盤事件   # 1、滑鼠事件:# 每個模擬事件後需加.perform() 才會執行# context_click() 右擊# double_click() 雙擊# drag_and_drop(source, target) 拖動#

學習筆記21QMouseEvent滑鼠事件簡介

一、QMouseEvent的詳細描述 首先請注意,Qt中的QMouseEvent一般只涉及滑鼠左鍵或右鍵的單擊、釋放等操作,而對滑鼠滾輪的響應則通過QWheeEvent來處理。 QMouseEvent類包含了用於描述滑鼠事件的引數。 當在一個窗口裡按住滑鼠按鍵、或移動、或釋放就會產生滑鼠事件QMouse

Java的GUI學習七(滑鼠事件)

  學習來自: http://www.cnblogs.com/xingyunblog/p/3850400.html import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import j

OpenCV滑鼠事件 選取矩形ROI區域

目的: 通過點選滑鼠,選擇矩形ROI區域,為後續的ROI區域處理提供方便。 程式碼如下: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include

自動化學習筆記滑鼠事件

ActionChains類提供了滑鼠操作的常用方法: perform():                  執行所有ActionChains類中儲存的行為 context_click():          右擊 doube_click():            雙

1.21 JQuery4滑鼠事件與滾動事件

滑鼠事件 1.click和dblclick 事件方法一般都有三種使用方式:我們就以click為例來介紹這些方式,接下來的方法不再冗餘介紹,只是談論最重要的知識點。 第一種方式 <div i

OpenCV入門ROI感興趣區域(滑鼠事件選定區域)

OpenCV入門:ROI感興趣區域(滑鼠事件選定區域) 部落格 http://blog.csdn.net/qq_23968185/article/details/51335291 #include <iostream> #include "opencv2/core/core.h

web前端實驗一利用Js捕獲滑鼠事件實現圖片切換

    很多時候在做web時,頭疼的不是功能的實現,而是前臺的介面,下面是介紹關於利用javascript捕獲滑鼠事件的實驗 實驗目的:滑鼠指向某一圖片時,把該圖片切換為指定圖片,離開時回覆原來圖片。 實驗用途:製作web導航、強調某一功能時非常常用。 直接附上原始碼,非

NGUI之響應滑鼠事件(劃過、停留、點選等)

一、不管什麼響應,必須要新增碰撞器(要注意的是NGUI要用自己的方法來新增碰撞器) 二、給需要響應的遊戲物件或者預設物體新增兩個指令碼UIEventListener 和UIEventOver,如圖 三、假設現在要響應滑鼠停留在物體和移走物體時候的兩種訊息 給物件新增指令碼

Unity3D開發(七)NGUI之UICamera控制觸控,滑鼠事件

先給論壇做個廣告:點選開啟連結 1. UICamera 功能介紹 主要包括UI事件的監聽,分發,覆蓋範圍為此Camera渲染的所有GameObject。 事件源包括:滑鼠,觸控,鍵盤,手柄。 事件包括:懸停,按下/擡起,選中/取消選中,點選,雙擊,拖拽,釋放,文字輸入,T