黑马程序员技术交流社区

标题: GUI的问题 [打印本页]

作者: 魏亮    时间: 2012-10-23 12:04
标题: GUI的问题
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方法之后应该不可以呀??
为什么在弹出对话框的时候,这些字符又进入文本框里呢???
还有就是怎么实现可以在文本框中实现退格键,并且不弹出对话框??

求指教????


作者: 冯纪纲    时间: 2012-10-24 13:15
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);
.........


作者: kylin_huang    时间: 2012-10-25 10:27
                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();//不做默认处理
                                }
                        }
                       
                });
作者: 魏亮    时间: 2012-10-25 13:13
二楼很给力,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2