新手,问2个swing事件处理基础问题 event 会有一个 getSource 方法 返回产生事件的 Object 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、java的swing事件处理是不是也象vc一样,是消息机制的??就是说比如我在一个按钮button上点了一下,vc中操作系统就会捕捉到这个“点击”事件并发消息给回调函数,java里是不是就是jvm捕捉到这个“点击”事件??然后jvm发“消息”给相应的事件处理函数的??答:java里面不是捕捉的,而是注册事件的,也就是说你认为他会产生什么事件而为他添加一个事件。 然后系统会自动抛出一个事件的对象.2.再者,我同时注册了多个按钮,那程序是怎么区分并响应到底是哪个按钮被点击的?答:这个简单,你可以通过这个系统抛出的对象来判断是点击了那个按钮JButton button1 = new JButton("按钮1"), button2 = new JButton("按钮2");button1.addActionListener(this);button2.addActionListener(this);public void actionPerformed(ActionEvent event) {if(event.getActionCommand().equals("按钮1")) { System.out.println("按下了按钮1");}if(event.getActionCommand().equals("按钮2")) { System.out.println("按下了按钮2");} } 还可以用(e.getSource instanceOf class)判断是哪个类的对象 再土土地问一个:b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法?? --------还可以用(e.getSource instanceOf class)判断是哪个类的对象----------------这个是不可取的,都同样的是JButton,那这样就判断不出来了。如果定义按钮了,在你的actionPerformed方法中能够调用的到这个按钮的引用,还可以用这种:JButton button1 = new JButton("按钮1"),....public void actionPerformed(ActionEvent event) {if(event.getSource() == button1){System.out.println("按下了按钮1");}而在事件方法中,不能直接调用按钮的引用时,就只有用event.getActionCommand().equals("按钮1")这种了。在定义时,还可以用这个按钮指定一个Commandbutton1.setActionCommand(""),这样,就可以避免直接用的默认的按钮文字,在以后程序要修改按钮的文字时,事件处理程序也要改。-----------b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法??------------------你的理解是正确的 谢谢!还想到一问:那,每个类是不是就只有一个actionPerformed(ActionEvent event)方法?? 应该是每一个组件有一个吧!比方说:所有的button有一个,所有list有一个! 当然,一个类当然只能有一个actionPerformed(ActionEvent event)你在一个类中,不管什么方法,哪能写两个呢! 多线程?帮帮忙,谢谢!!! 最近的一些公司的真实笔试题 B Tree问题 如果在树里从小到大排序 SWT中的几个小问题... 大家看看这段简单的代码,我有个问题请大家帮忙 高手请进 jsp 树形控制 为什么X2,Y2输出是这个? 一个很入门的问题 请教怎么样把从文本框中获得的字符串作为对象名 如何判断一个string中存储的是乱码? 友情求助,问个循环的问题。
答:java里面不是捕捉的,而是注册事件的,也就是说你认为他会产生什么事件而为他添加一个事件。
然后系统会自动抛出一个事件的对象.2.再者,我同时注册了多个按钮,那程序是怎么区分并响应到底是哪个按钮被点击的?
答:这个简单,你可以通过这个系统抛出的对象来判断是点击了那个按钮
JButton button1 = new JButton("按钮1"),
button2 = new JButton("按钮2");
button1.addActionListener(this);
button2.addActionListener(this);
public void actionPerformed(ActionEvent event) {
if(event.getActionCommand().equals("按钮1"))
{
System.out.println("按下了按钮1");
}
if(event.getActionCommand().equals("按钮2"))
{
System.out.println("按下了按钮2");
}
}
判断是哪个类的对象
b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法??
还可以用(e.getSource instanceOf class)
判断是哪个类的对象
----------------
这个是不可取的,都同样的是JButton,那这样就判断不出来了。
如果定义按钮了,在你的actionPerformed方法中能够调用的到这个按钮的引用,还可以用这种:
JButton button1 = new JButton("按钮1"),
....
public void actionPerformed(ActionEvent event) {
if(event.getSource() == button1)
{
System.out.println("按下了按钮1");
}
而在事件方法中,不能直接调用按钮的引用时,就只有用
event.getActionCommand().equals("按钮1")这种了。
在定义时,还可以用这个按钮指定一个Command
button1.setActionCommand(""),这样,就可以避免直接用的默认的按钮文字,在以后程序要修改按钮的文字时,事件处理程序也要改。-----------
b1.addActionListener(...)括号里的参数是不是一个对象的引用?然后当b1按钮被按下后,系统就去找括号里引用所指对象所在的类的actionPerformed(ActionEvent event)方法??
------------------
你的理解是正确的
还想到一问:那,每个类是不是就只有一个actionPerformed(ActionEvent event)方法??
比方说:所有的button有一个,所有list有一个!