首先要在源对象添加Drag之类的事件,设置DragDrop的数据,然后需要将目标对象的AllowDrop设为True,然后在目标对象添加DragEnter等相关事件,实现Drop之后的动作。
先解释一下原理性的东西,其实什么事件源、事件、侦听器,听起来相当的玄乎,在Java中一切皆为对象,所以它们也就是3类对象。
举个例子,你创建了一个按钮对象,它可以产生点击事件并将事件对象传递出去,因此它就是一个事件源。你希望在按钮被点击的时候执行一些特定的 *** 作(d个对话框什么的),那么你就需要把要做的事情提前告诉按钮对象,方式就是通过创建一个侦听器对象并把它加入到按钮点击事件的侦听序列里。
现在讲讲代码怎么写,就点击按钮这个例子来说,你只要创建一个类实现ActionListener接口即可,大部分的工作已经被封装在按钮对象的创建过程中了。
我再多罗嗦2句,事件这个概念相当有用,JMS,SOA,ESB这些当前企业应用开发中的核心技术都与它都有密切的关系,它是从设计的角度来看待已知问题,使问题的各参与者达到更加低的耦合度,Java领域已经出现了基于事件驱动设计(EDD)的框架,它将业务逻辑及业务处理器完全分离开来(不同于Spring这样的Ioc容器还存在接口依赖),通过引入线程实现了异步处理,极大地提高了系统的吞吐量,它是对传统的观察者模式的一种发展和延伸。
如果不是硬件原因导致的蓝屏,可能就是系统冲突,软件问题
蓝屏之前有没有什么敏感 *** 作,楼主好好想想呢
比如装了什么软件不能兼容,如果是,就先卸载了那个软件
会不会是中毒了,试试用腾讯电脑管家去杀个毒
腾讯电脑管家--杀毒--全盘扫描
还有经常重启可能是散热问题,把机箱打开清理一下风扇试试
如果还是不能解决只能重新安装系统了
关于JQuery中this和eventtarget的区别如下:
1、js中的事件会冒泡,因此可以更改,
但是eventtarget不会更改,它始终指向触发事件本身的DOM元素;
2、假设htm是<div> <span> </ span> </ div>,单击span时,更改span的颜色。
如果使用this按钮单击span,则由于事件起泡机制,div将更改颜色。
但是使用eventtarget就不会。
扩展资料:
关于JQuery中this的用法举例
例1:
$("#btnConfirm")click(function(){alert($(this)val()); // ,在这里,this指的是这个ID为btnConfirm的选项,因为你现在点击的是ID为btnConfirm的选项,因此this就是它})
例2:
$("ul li")each(function(){alert( $(this)text()); // ,这里的this指的是迭代的每个li元素,因为每次迭代,得到的都是一个<li>元素,因此这个时候this 就代表着这个当前的<li>元素
Java 最新的事件处理方法是基于授权事件模型,事件源生成事件并将其发送至一个或多个监听器,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。
事件:在授权事件模型中,事件是一个描述事件源状态改变的对象 。 通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。
事件源:事件源是一个生成事件的对象
一个事件源可能会生成不同类型的事件,事件源提供了一组方法,用于为事件注册一个或多个监听器。
每种事件的类型都有其自己的注册方法。一般形式为:public void add<EventType>Listener (TypeListener e)
AWT采取的事件控制过程:监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”
事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。
事件源将在发生事件时向所有注册的监听器发送事件对象。
监听器对象使用事件对象中的信息来确定它们对事件的响应
事件模型:
基于代理(授权)事件模型,事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的add<EventType>Listener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。
此模型主要由以三种对象为中心组成
事件源 由它来激发产生事件
是产生或抛出事件的对象。
事件监听器 由它来处理事件
实现某个特定EventListener 接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型 。
事件 具体的事件类型
事件类型封装在以javautilEventObject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象
import javaawtBorderLayout;
import javaawtColor;
import javaawtGridLayout;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJPanel;
import javaxswingJTextField;
/
一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。
但还不支持键盘 *** 作。
/
public class Calculator extends JFrame implements ActionListener {
/ 计算器上的键的显示名字 /
private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"", "%", "1", "2", "3", "-", "1/x", "0", "+/-", "", "+", "=" };
/ 计算器上的功能键的显示名字 /
private final String[] COMMAND = { "Backspace", "CE", "C" };
/ 计算器左边的M的显示名字 /
private final String[] M = { " ", "MC", "MR", "MS", "M+" };
/ 计算器上键的按钮 /
private JButton keys[] = new JButton[KEYSlength];
/ 计算器上的功能键的按钮 /
private JButton commands[] = new JButton[COMMANDlength];
/ 计算器左边的M的按钮 /
private JButton m[] = new JButton[Mlength];
/ 计算结果文本框 /
private JTextField resultText = new JTextField("0");
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true;
// 计算的中间结果。
private double resultNum = 00;
// 当前运算的运算符
private String operator = "=";
// *** 作是否合法
private boolean operateValidFlag = true;
/
构造函数
/
public Calculator(){
super();
//初始化计算器
init();
//设置计算器的背景颜色
thissetBackground(ColorLIGHT_GRAY);
thissetTitle("计算器");
//在屏幕(500, 300)坐标处显示计算器
thissetLocation(500, 300);
//不许修改计算器的大小
thissetResizable(false);
//使计算器中各组件大小合适
thispack();
}
/
初始化计算器
/
private void init() {
// 文本框中的内容采用右对齐方式
resultTextsetHorizontalAlignment(JTextFieldRIGHT);
// 不允许修改结果文本框
resultTextsetEditable(false);
// 设置文本框背景颜色为白色
resultTextsetBackground(ColorWHITE);
//初始化计算器上键的按钮,将键放在一个画板内
JPanel calckeysPanel = new JPanel();
//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanelsetLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i < KEYSlength; i++) {
keys[i] = new JButton(KEYS[i]);
calckeysPaneladd(keys[i]);
keys[i]setForeground(Colorblue);
}
//运算符键用红色标示,其他键用蓝色表示
keys[3]setForeground(Colorred);
keys[8]setForeground(Colorred);
keys[13]setForeground(Colorred);
keys[18]setForeground(Colorred);
keys[19]setForeground(Colorred);
//初始化功能键,都用红色标示。将功能键放在一个画板内
JPanel commandsPanel = new JPanel();
//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
commandsPanelsetLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i < COMMANDlength; i++) {
commands[i] = new JButton(COMMAND[i]);
commandsPaneladd(commands[i]);
commands[i]setForeground(Colorred);
}
//初始化M键,用红色标示,将M键放在一个画板内
JPanel calmsPanel = new JPanel();
//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calmsPanelsetLayout(new GridLayout(5, 1, 3, 3));
for (int i = 0; i < Mlength; i++) {
m[i] = new JButton(M[i]);
calmsPaneladd(m[i]);
m[i]setForeground(Colorred);
}
//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,
//将文本框放在北部,将calms画板放在计算器的西部。
//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内
JPanel panel1 = new JPanel();
//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
panel1setLayout(new BorderLayout(3, 3));
panel1add("North", commandsPanel);
panel1add("Center", calckeysPanel);
//建立一个画板放文本框
JPanel top = new JPanel();
topsetLayout(new BorderLayout());
topadd("Center", resultText);
//整体布局
getContentPane()setLayout(new BorderLayout(3, 5));
getContentPane()add("North", top);
getContentPane()add("Center", panel1);
getContentPane()add("West", calmsPanel);
//为各按钮添加事件侦听器
//都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener
for (int i = 0; i < KEYSlength; i++) {
keys[i]addActionListener(this);
}
for (int i = 0; i < COMMANDlength; i++) {
commands[i]addActionListener(this);
}
for (int i = 0; i < Mlength; i++) {
m[i]addActionListener(this);
}
}
/
处理事件
/
public void actionPerformed(ActionEvent e) {
//获取事件源的标签
String label = egetActionCommand();
if (labelequals(COMMAND[0])){
//用户按了"Backspace"键
handleBackspace();
} else if (labelequals(COMMAND[1])) {
//用户按了"CE"键
resultTextsetText("0");
} else if (labelequals(COMMAND[2])){
//用户按了"C"键
handleC();
} else if ("0123456789"indexOf(label) >= 0) {
//用户按了数字键或者小数点键
handleNumber(label);
// handlezero(zero);
} else {
//用户按了运算符键
handleOperator(label);
}
}
/
处理Backspace键被按下的事件
/
private void handleBackspace() {
String text = resultTextgetText();
int i = textlength();
if (i > 0) {
//退格,将文本最后一个字符去掉
text = textsubstring(0, i - 1);
if (textlength() == 0) {
//如果文本没有了内容,则初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
} else {
//显示新的文本
resultTextsetText(text);
}
}
}
/
处理数字键被按下的事件
@param key
/
private void handleNumber(String key) {
if (firstDigit) {
//输入的第一个数字
resultTextsetText(key);
} else if ((keyequals("")) && (resultTextgetText()indexOf("") < 0)){
//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
resultTextsetText(resultTextgetText() + "");
} else if (!keyequals("")) {
//如果输入的不是小数点,则将数字附在结果文本框的后面
resultTextsetText(resultTextgetText() + key);
}
//以后输入的肯定不是第一个数字了
firstDigit = false;
}
/
处理C键被按下的事件
/
private void handleC() {
//初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
}
/
处理运算符键被按下的事件
@param key
/
private void handleOperator(String key) {
if (operatorequals("/")) {
//除法运算
//如果当前结果文本框中的值等于0
if (getNumberFromText() == 00){
// *** 作不合法
operateValidFlag = false;
resultTextsetText("除数不能为零");
} else {
resultNum /= getNumberFromText();
}
} else if (operatorequals("1/x")) {
//倒数运算
if (resultNum == 00){
// *** 作不合法
operateValidFlag = false;
resultTextsetText("零没有倒数");
} else {
resultNum = 1 / resultNum;
}
} else if (operatorequals("+")){
//加法运算
resultNum += getNumberFromText();
} else if (operatorequals("-")){
//减法运算
resultNum -= getNumberFromText();
} else if (operatorequals("")){
//乘法运算
resultNum = getNumberFromText();
} else if (operatorequals("sqrt")) {
//平方根运算
resultNum = Mathsqrt(resultNum);
} else if (operatorequals("%")){
//百分号运算,除以100
resultNum = resultNum / 100;
} else if (operatorequals("+/-")){
//正数负数运算
resultNum = resultNum (-1);
} else if (operatorequals("=")){
//赋值运算
resultNum = getNumberFromText();
}
if (operateValidFlag) {
//双精度浮点数的运算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultTextsetText(StringvalueOf(t1));
} else {
resultTextsetText(StringvalueOf(resultNum));
}
}
//运算符等于用户按的按钮
operator = key;
firstDigit = true;
operateValidFlag = true;
}
/
从结果文本框中获取数字
@return
/
private double getNumberFromText() {
double result = 0;
try {
result = DoublevalueOf(resultTextgetText())doubleValue();
} catch (NumberFormatException e){
}
return result;
}
public static void main(String args[]) {
Calculator calculator1 = new Calculator();
calculator1setVisible(true);
calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
}
上面这段代码,在 JavaScript 的事件处理中比较常见,主要是为了兼容老版本的 Internet Explorer(主要是 IE9 之前的版本)而设立的,原因是老版 IE 不支持标准的 W3C 事件处理规范。
这段代码中的 e 代表事件(event)对象,即所谓的事件驱动源。下面以鼠标点击事件为例,作一个测试:
(HTML)
<!DOCTYPE html><html>
<body>
<button type="button" id="btn">Click</button>
<script type="text/javascript">
// JavaScript 代码
</script>
</body>
</html>
(JavaScript)
documentgetElementById("btn")onclick=function(e){alert(e);
}
编写一个匿名函数 function(e){ alert(e); },并将其赋值给事件句柄(即 onclick),这是一个回调函数,相当于 onclick(e){ alert(e); }。这段代码在 Chrome、Firefox 或新版 IE(IE9 及以后的版本)等支持标准的浏览器下运行,d出的应该是类似“[object MouseEvent]”的字符串,说明 e 为事件对象;而在老版 IE 下运行,结果就是“undefined”(未定义)。
显而易见,在标准的流程中, 事件对象默认由事件句柄函数的第一个参数传入,供处理函数使用;在老版 IE 中,这个事件对象却无法直接由句柄函数传入,反而可以使用一个全局变量来代表事件对象,这个变量即 windowevent。同样,可以用例子验证:
documentgetElementById("btn")onclick=function(e){alert(windowevent);
}
在老版 IE 中即可显示 windowevent 为对象,说明可以通过这种方式取得事件对象。(其实除了 IE 外,Chrome 等浏览器中也存在 windowevent,但是在支持标准的浏览器中,我们最好使用标准方式。)
现在,就可以理解为什么会出现 e=e||windowevent 这种写法了。因为只有这样才能兼容老版 IE 的事件处理过程:如果浏览器支持标准的处理过程则使用句柄函数传入的第一个参数(e),反之则使用 IE 的处理方法(windowevent)。从某种意义上说,标准的事件对象(e) 和老版 IE 中的 windowevent 可以视为等价的(事实上有一些区别,这里就不详细区分了),两者任何一个有效都可以供我们使用。
documentgetElementById("btn")onclick=function(e){e=e||windowevent;
// 使用 e 对象
}
于是,上面的这段代码就可以兼容几乎所有的浏览器了。
以上就是关于在c#中,在dragdrop中如何得到鼠标位置的对象全部的内容,包括:在c#中,在dragdrop中如何得到鼠标位置的对象、java的事件源、事件、侦听器、游戏时蓝屏,查看系统事件来源:SetupARService等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)