当前位置:  技术问答>java相关

关于java写gui,提问。(关于事件处理方面)

    来源: 互联网  发布时间:2014-12-26

    本文导语:  我定了这么一个规则:TextField如果值为“”,则不允许失去焦点,以下这么几种方法请大虾指教: protected void processFocusEvent(FocusEvent e){         //method 1         super.processFocusEvent(e);         if( e.getID() ...

我定了这么一个规则:TextField如果值为“”,则不允许失去焦点,以下这么几种方法请大虾指教:
protected void processFocusEvent(FocusEvent e){
        //method 1
        super.processFocusEvent(e);
        if( e.getID() == FocusEvent.FOCUS_LOST){
            if(getText().equals("")){
                JOptionPane.showMessageDialog(  null,
                                                "inputerror",
                                                "InputError",
                                                JOptionPane.ERROR_MESSAGE);
                this.requestFocus();
            }
        }
    }
症状:message会弹出两次;
解释:据本菜鸟猜测,可能是弹出这个东西本身也会触发lostfocus;
问题:为什么不是无限次呢?
改进后:protected void processFocusEvent(FocusEvent e){
        //method 2
        if( e.getID() == FocusEvent.FOCUS_LOST){
            if(getText().equals("")){
                JOptionPane.showMessageDialog(  null,
                                                "inputerror",
                                                "InputError",
                                                JOptionPane.ERROR_MESSAGE);
            }else{
                super.processFocusEvent(e);
            }
        }else{
            super.processFocusEvent(e);
        }
    }
症状:这下更惨,还是弹出两次,然后整个画面的focus就乱了。
解释:没有。
问题:是不是事件没有处理干净?
再改进:protected void processFocusEvent(FocusEvent e){
        //method 3
        super.processFocusEvent(e);
        if( e.getID() == FocusEvent.FOCUS_LOST){
            if( checkFlg ){
                checkFlg = !(getText().equals(""));
                super.processFocusEvent(e);
                if ( !checkFlg ){
                    JOptionPane.showMessageDialog(  null,
                                                    "inputerror",
                                                    "InputError",
                                                    JOptionPane.ERROR_MESSAGE);
                    this.requestFocus();
                }
            }else{
                checkFlg = true;
            }
        }
    }
注:checkFlg是在class中定义的boolean型变量,初始为true。
症状:这下子倒是看起来没问题了,不过我当时这么作纯粹是为了避免那个两次弹出的问题。具体为什么?我也不知道。
解释:没有。
问题:n多。

相关问题:
如果你是用tab键迁移焦点,还只能看出上述现象,假如你直接按下另一个button,你就会发现:等你的焦点回到textfield后,你再把鼠标移到那个被你按过的button上,他就会出现“按下”的显示状态。
原因:本菜鸟猜测,button的UI在paintButtonPressed的时候,根本没有考虑是否占据焦点,也确实是这个样子的。可是触发这个函数的是哪里呢?难道那个地方也没有判断吗?

|
hehe,看看java的源程序吧,我的好多问题就是这么找到的!

有一点可以证明的是:当你弹出一个模式的对话框(如MessageDialog)时,整个窗口的输入焦点就会汇集到对话框上,所有的窗口组件(时间源)都会产生一个FOCUS_LOST消息,这就是为什么对话框会弹出两次的原因。看得出,你最后的解决方案说明你一看出了这一点 8)。

看得出老兄,你是个爱钻研问题的程序员,呵呵,加油呀!

|
processFocusEvent是什麽呀,是你自己定义的方法吗

    
 
 

您可能感兴趣的文章:

  • 提问:关于JAVA处理网络音频传输的问题????
  • [菜鸟提问]关于linux下的java编程
  • java菜鸟提问,一个简单得不得了的,不能再简单的输出问题!!!!
  • 菜鸟提问:如何用java.exe去运行不同路径下的class文件?
  • 笨鸟提问:Java都能什么?
  • JAVA菜鸟提问了,HELLOWORLD通不过!!
  • 新手提问,为什么我import java.util.Calendar;后,Calendar c=new Calendar.getInstance();却抱错呢??谢谢
  • java初学者的提问?请大家帮忙
  • 新手提问:怎样开发Java的b/s模式的系统?
  • 菜鸟提问:java运行的问题?
  • 新手上路!提问兼散分!!JB,JSP和JAVA SCRIPT的 的区别等。
  • java菜菜鸟提问之二:我想下载个jbuilder,哪儿有,我找到的都没序列号。
  • 谁有java方面的毕业论文?我想做此方面的,但手头一点资料都没有
  • 关于java和财务软件方面的问题 如果有搞这方面开发的留下qq号
  • 请问各位现在搞开发都用java做哪些方面的项目,真不知道怎么学向那方面学采好.
  • 越弄java越发现自己是菜鸟,好多方面都没有涉及到?你们大家都集中在哪方面开发?顺便帮我解决个小问题?
  • 谁了解JAVA方面的认证,想考一个JAVA的认证!XIEXIE
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • 哪位有java通信方面的经验,谈谈如何利用java编写服务器程序来接受unix主机发送的数据信息?
  • 高分,谁有Java方面的毕业论文?急!!
  • 介绍一些学习JAVA SWING 方面的好书.
  • 哪里有Java 2D Graphics方面的介绍?
  • 请问:java.rmi.* javax.naming.* 这两个库是应用什么方面的
  • JAVA主要用在哪方面:数据库、通讯、电子商务?
  • 请教:你一般用 Java 进行哪方面程序的开发?
  • 现在有人用java 搞财务软件方面的业务吗 散分
  • 用java可以串口通信方面的程序吗?
  • JAVA开发什么方面比较有前途??
  • 哪位朋友有关于Java调试方面的资料?
  • java能做短信息发送软件吗?接口是什么?谁能明确说说这方面知识
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于java的事件问题,如何在程序中使一个button被click,从而引发这个button的事件处理代码????
  • java抓取鼠标事件和鼠标滚轮事件示例
  • Java List双击事件实现方法
  • java 事件中的GEIID()怎么用?谢谢
  • 在java中如何人工触发事件?
  • java的事件处理机制如何运用?
  • “Java的事件是从无到有,MFC的消息是从有到无。”
  • JAVA事件处理
  • 有关Java中事件
  • Java Event!!!事件!!
  • JSplitPane如何动态调整左右帧的大小?如何监听窗口变大,缩小的事件?(java中好像没有)
  • 请问:java上,jRadioButtonod的事件是什么?
  • 请关注一下java的事件机制!
  • 一个关于java事件处理的简单问题!
  • java随机事件分发器示例
  • java中多点传送(同一个事件可同时传送给多个监听器对象corejava1例8.6)采用哪种设计模式谢谢
  • 我想问一下java的事件驱动机制是如何实现的,如何实现自定义的事件驱动?不够再加100!
  • java页面设计之事件处理综合介绍
  • 高手指教:关于鼠标事件(java.awt.event.MouseEvent e)!
  • Java添加事件监听的四种方法代码实例
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3