| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 597 人关注过本帖
标题:一个奇怪的监听器的例子,谁有兴趣看看啊!
只看楼主 加入收藏
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
结帖率:55.56%
收藏
已结贴  问题点数:20 回复次数:7 
一个奇怪的监听器的例子,谁有兴趣看看啊!
text1.rar (833 Bytes)

我以前以为监听器就是时刻监听,一旦监听对象发生变化,立刻执行相应代码
可这个例子中,监听器确实是对TextArea内的值变化监听并执行了代码,但好像不是立即,我在代码中的一切变更它都不会显现出来,这个很不好啊,谁跟我说说这是为什么啊?看源码我是看不懂的呀!
2013-05-05 15:33
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:20 
是你自己理解错了吧,监听执行过程正常,一旦事件条件变更,代码就会被执行。
2013-05-06 11:39
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 2楼 ren829
可是我上面的例子,明显说明是在我这块代码结束之后监听才起作用的,上面的只是一个小例子,我主要是在一个大一些的程序中遇到了这个问题,我在对TextArea改动后又把改动状态改回为未修改,但直到我修改完后,对TextArea的监听才运行,它会立刻把我的未修改状态再改回到已修改,让我实在是没有办法,只能说明它肯定不是一遇到条件变动代码就执行的
2013-05-09 19:15
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:0 
是在没理解你的意思,你代码里改什么了?无非是内容改变的时候,i重新赋值为1,然后打印出来,
2013-05-09 20:55
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
程序代码:
import java.awt.*;
import java.awt.event.*;
public class text1 implements TextListener {

    int i=0;
    Frame frame=null;
    TextArea textArea=null;
    public static void main(String[] args) {
        new text1();
    }
    public text1() {
        text();
        System.out.println("程序执行完后 i="+i);
    }
    private void text() {
        frame=new Frame("test");
        textArea=new TextArea("");
        textArea.addTextListener(this);
        frame.add(textArea);
        frame.setBounds(300,300,300,300);
        frame.setVisible(true);

        textArea.setText("fffffffff");
        System.out.println("文本变化后1 i="+i);
     }
    public void textValueChanged(TextEvent e) {
        i=1;
        System.out.println("监听器生效  i="+i);
    }


}
按我理解,textArea.setText("fffffffff")后说明文本发生了变化,那么监听器会被触动,“文本变化后i”不就应该输出为1了吗?但不是这样的,它还是零;那么咱再等等,等到程序执行完成后,"程序执行完后 i="是不是就应该是1了,可是还不是;一直到全部执行完了,监听器才被触发,执行结果如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册

这是不是说监听器并不是实时执行的??!
2013-05-15 21:30
lxyhcm
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-5-15
收藏
得分:0 
一些问题
本人是新手,谁能给我推荐一个新手适合的java教程,还有做编程的人员需要考什么证书?
2013-05-15 22:10
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:0 
以下是引用h781458175在2013-5-15 21:30:39的发言:

import java.awt.*;
import java.awt.event.*;
public class text1 implements TextListener {

    int i=0;
    Frame frame=null;
    TextArea textArea=null;
    public static void main(String[] args) {
        new text1();
    }
    public text1() {
        text();
        System.out.println("程序执行完后 i="+i);
    }
    private void text() {
        frame=new Frame("test");
        textArea=new TextArea("");
        textArea.addTextListener(this);
        frame.add(textArea);
        frame.setBounds(300,300,300,300);
        frame.setVisible(true);

        textArea.setText("fffffffff");
        System.out.println("文本变化后1 i="+i);
     }
    public void textValueChanged(TextEvent e) {
        i=1;
        System.out.println("监听器生效  i="+i);
    }


}按我理解,textArea.setText("fffffffff")后说明文本发生了变化,那么监听器会被触动,“文本变化后i”不就应该输出为1了吗?但不是这样的,它还是零;那么咱再等等,等到程序执行完成后,"程序执行完后 i="是不是就应该是1了,可是还不是;一直到全部执行完了,监听器才被触发,执行结果如下图:

这是不是说监听器并不是实时执行的??!



晕了,你些的这些,文本变化后,程序执行后,那是你认为的执行顺序,可不是程序真正的执行顺序, 首先被执行的是构造器,所以你构造器里的text()里的打印语句被执行,然后是构造器的打印语句,然后才是监听变化的打印语句,别被自己给误导了。
2013-05-16 00:29
h781458175
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-2-7
收藏
得分:0 
回复 7楼 ren829
那我就描述一下我遇到的问题:

我在作一个java记事本,其中有一个变量(String型),它用来标记文本是否被改变(这样我在关闭、新建、打开时就可以用它来判定要不要弹出保存询问框);

举其中一个为例子,比如“新建”:
当新建时我是这样处理的:先把前一个文本清空,将标题换成“无标题-记事本”,然后再将标记修改与否的变量标记为“未修改”,因为刚新建的文本肯定是未修改的嘛!但此时问题就来了,因为我自以为的那个问题,即监听器不是实时触发的,在我这些动作完成后,它才去检测文本是否被修改,这时它认为我的文本从有内容状态变为空状态是发生了变化,所以这时它就又把我标记修改与否的变量改为了“已修改”(这是我textListener里的动作);相当于我的这个标记变量经历了一个这样的过程:已修改--未修改----已修改;这样我一个刚刚新建的文本就是一个已修改的文档,让我很不舒服,这不合乎常理啊,再有打开一个文档也有这种情况,一个刚刚打开的文档已是“已修改”;这是不是说明监听器不是实时触发的呀,或者有什么办法能解决我的这个问题呢?

也可能我的用词不是很准,但这确实是一个问题!
2013-05-16 23:30
快速回复:一个奇怪的监听器的例子,谁有兴趣看看啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020519 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved