A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏亮 中级黑马   /  2012-10-23 12:04  /  1345 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{
        private Frame f;
        private Button but;
        private TextField tf;
        MouseAndKeyEvent()
        {
                ini();
        }
        public void ini()
        {
                f = new Frame("我的窗口");
                f.setBounds(300,200,500,400);
                f.setLayout(new FlowLayout());
               
                tf =new TextField(10);
                but = new Button("转到");
               
                f.add(tf);
                f.add(but);

                myEvent();

                f.setVisible(true);
        }
        public void myEvent()
        {
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
                /*
                but.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                System.out.println("关闭。。。按钮干的");
                                System.exit(0);
                        }
                });
                */
                tf.addKeyListener(new KeyAdapter()
                {
                        public void keyPressed(KeyEvent e)
                        {
                                int code = e.getKeyCode();
                               
                                if (!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9 ))
                                {       
                                        e.consume();//我已经用了consume方法了为什么,非数字字符还是进来了呢
                                        final Dialog dia = new Dialog(f,"提示信息",true);
                                        dia.setBounds(300,200,200,100);
                                        dia.setLayout(new FlowLayout());

                                        Label lab = new Label("错误字符",Label.CENTER);
                                        Button b =new Button("确定");

                                        dia.add(lab);
                                        dia.add(b);
                                       
                                       
                                        b.addActionListener(new ActionListener()
                                        {
                                                public void actionPerformed(ActionEvent e)
                                                {
                                                        dia.setVisible(false);
                                                }
                                        });
                                        dia.addWindowListener(new WindowAdapter()
                                        {
                                                public void windowClosing(WindowEvent e)
                                                {
                                                        dia.setVisible(false);
                                                }
                                        });
                                        dia.setVisible(true);

                                }

                        }
                });

        }








        public static void main(String[] args)
        {
                new MouseAndKeyEvent();
        }
}
问题写在上面,大家可以运行一下,出来的文本框本来是可以输入0—9之外的字符的,加了consume方法之后应该不可以呀??
为什么在弹出对话框的时候,这些字符又进入文本框里呢???
还有就是怎么实现可以在文本框中实现退格键,并且不弹出对话框??

求指教????

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

3 个回复

倒序浏览
tf.addKeyListener(new KeyAdapter() {
                        public void keyPressed(KeyEvent e) {
                                int code = e.getKeyCode();

                                if ((code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)
                                                && code != KeyEvent.VK_BACK_SPACE) {
                                        e.consume();//1. 这个地方你的判断条件没有没有改变,所以数字还是可以输进去的  2.想实现删除不弹出对话框的话,你可以再加个判断,判断是不是按下了backspace键,也就是说你按下了数字键,但是没有按下backspace键,那么就可以进行删除的操作了。
                                        final Dialog dia = new Dialog(f, "提示信息", true);
                                        dia.setBounds(300, 200, 200, 100);
                                        dia.setLayout(new FlowLayout());

                                        Label lab = new Label("错误字符", Label.CENTER);
                                        Button b = new Button("确定");

                                        dia.add(lab);
                                        dia.add(b);
.........

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
                tf.addKeyListener(new KeyAdapter()
                {
                        public void keyPressed(KeyEvent e)
                        {
                                int code =e.getKeyCode();
                                if(!(code>=KeyEvent.VK_0&&code<=KeyEvent.VK_9))
                                {
                                        System.out.println(code+"input is wrongful");
                                        e.consume();//不做默认处理
                                }
                        }
                       
                });

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
二楼很给力,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马