关于java事件处理机制的一些问题
1、一个组件是自己产生事件给监听器,还是组建将接受到的事件再传递给接听器。我想问的就是事件到底是由谁产生的。2、监听器接受到事件后,如何选择要执行的方法。据我所知,监听器...
1、一个组件是自己产生事件给监听器,还是组建将接受到的事件再传递给接听器。我想问的就是事件到底是由谁产生的。
2、监听器接受到事件后,如何选择要执行的方法。据我所知,监听器只是实现相对应的接口。而对应接口需要实现的方法有时不止一个。那么监听器是是如何找到对应要实现的方法飞哪?
3、一个监听器可以被几个组建注册。
4、gui下的事件机制总是让我有点疑惑。过去一直用的是命令行,现在开始接触gui后总觉得有一些不对的地方。命令行的思想已经根生地固。求高人指点
还有一个最最不我疑惑的问题。在控制台应用程序下,如果执行完了main函数的所有指令,那么这个程序应该说就已经结束了。(大多数情况下是这样的吧?)
然而若果我是在gui下。执行完main函数后,程序依然在执行。如果我此时触发一个事件,那么程序就会对此作出相应的反应。
我想说,gui的这种情况是怎么实现的? 展开
2、监听器接受到事件后,如何选择要执行的方法。据我所知,监听器只是实现相对应的接口。而对应接口需要实现的方法有时不止一个。那么监听器是是如何找到对应要实现的方法飞哪?
3、一个监听器可以被几个组建注册。
4、gui下的事件机制总是让我有点疑惑。过去一直用的是命令行,现在开始接触gui后总觉得有一些不对的地方。命令行的思想已经根生地固。求高人指点
还有一个最最不我疑惑的问题。在控制台应用程序下,如果执行完了main函数的所有指令,那么这个程序应该说就已经结束了。(大多数情况下是这样的吧?)
然而若果我是在gui下。执行完main函数后,程序依然在执行。如果我此时触发一个事件,那么程序就会对此作出相应的反应。
我想说,gui的这种情况是怎么实现的? 展开
展开全部
你说得是监听机制,也就是观察者模式
第一个
public interface RandomNumberListener {//接口
public void numberChanged(double d);
}
第二个
public class Consol implements RandomNumberListener{
@Override
public void numberChanged(double d) {
System.out.println(d);
}
}
第三个
public class SwingWindow
extends JFrame
implements RandomNumberListener{//观察者
private JLabel label = new JLabel();
public SwingWindow(){
this.getContentPane().add( label);
this.setSize(300,200);
this.setVisible(true);
}
@Override
public void numberChanged(double d) {
label.setText(String.valueOf(d));
}
}
第四个
public class RandomNumber {//业务
private double r;
private List<RandomNumberListener> listeners = new ArrayList<RandomNumberListener>();
//添加所有观察者
public void addRandomNumberListener(RandomNumberListener lis){
listeners.add(lis);
}
public void random(){
r = Math.random();
//数据发生改变,通知所有的观察者
for (RandomNumberListener lis : listeners) {
lis.numberChanged(r);
}
}
}
第五个
public class Test {
public static void main(String[] args) throws InterruptedException{
RandomNumber rn = new RandomNumber();
SwingWindow sw = new SwingWindow();
Consol c = new Consol();
rn.addRandomNumberListener(sw);
rn.addRandomNumberListener(c);
while(true){
rn.random();
Thread.sleep(new Random().nextInt(3000)+1000L);
}
}
}
第一个
public interface RandomNumberListener {//接口
public void numberChanged(double d);
}
第二个
public class Consol implements RandomNumberListener{
@Override
public void numberChanged(double d) {
System.out.println(d);
}
}
第三个
public class SwingWindow
extends JFrame
implements RandomNumberListener{//观察者
private JLabel label = new JLabel();
public SwingWindow(){
this.getContentPane().add( label);
this.setSize(300,200);
this.setVisible(true);
}
@Override
public void numberChanged(double d) {
label.setText(String.valueOf(d));
}
}
第四个
public class RandomNumber {//业务
private double r;
private List<RandomNumberListener> listeners = new ArrayList<RandomNumberListener>();
//添加所有观察者
public void addRandomNumberListener(RandomNumberListener lis){
listeners.add(lis);
}
public void random(){
r = Math.random();
//数据发生改变,通知所有的观察者
for (RandomNumberListener lis : listeners) {
lis.numberChanged(r);
}
}
}
第五个
public class Test {
public static void main(String[] args) throws InterruptedException{
RandomNumber rn = new RandomNumber();
SwingWindow sw = new SwingWindow();
Consol c = new Consol();
rn.addRandomNumberListener(sw);
rn.addRandomNumberListener(c);
while(true){
rn.random();
Thread.sleep(new Random().nextInt(3000)+1000L);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询