黑马程序员技术交流社区

标题: JTextField中添加KeyListener是非数字无效。 [打印本页]

作者: 小权    时间: 2013-6-16 21:22
标题: JTextField中添加KeyListener是非数字无效。
e.consume();//?????怎么没用效啊
  1. public class test5 extends JFrame {

  2.         public test5() {
  3.                 JTextField field = new JTextField(10);
  4.                 field.addKeyListener(new KeyAdapter() {
  5.                         //添加事件监听
  6.                         public void keyPressed(KeyEvent e)
  7.                         {
  8.                                 System.out.println(e.getKeyCode());
  9.                                 if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9))
  10.                                         e.consume();//?????怎么没用效啊
  11.                         }
  12.                 });
  13.                

  14.                 this.add(field);
  15.                 this.setLayout(new FlowLayout());
  16.                 this.setBounds(100, 200, 300, 100);
  17.                 this.setVisible(true);
  18.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19.         }

  20.         public static void main(String[] args)
  21.         {
  22.                 new test5();
  23.         }

  24. }
复制代码
仍然可以加入字符

作者: First    时间: 2013-6-17 09:10
该问题主要是由TextField 和 JTextField 不同引起的
楼主可以把JTextField 改为TextField;
还可以把e.consum() 改掉,用setEditable(false);
  1. package test;

  2. import java.awt.FlowLayout;
  3. import java.awt.event.KeyAdapter;
  4. import java.awt.event.KeyEvent;

  5. import javax.swing.JFrame;
  6. import javax.swing.JTextField;

  7. public class Demo extends JFrame {
  8.        
  9.         JTextField field = new JTextField(10);
  10.        
  11.         //TextField field = new TextField(10);
  12.     public Demo() {
  13.        field.addKeyListener(new KeyAdapter() {
  14.                 //添加事件监听
  15.                 public void keyPressed(KeyEvent e)
  16.                 {
  17.                         int key = e.getKeyCode();
  18.                     System.out.println(key);
  19.                     if(!(key>=KeyEvent.VK_0 && key<=KeyEvent.VK_9))
  20.                             field.setEditable(false);//?????怎么没用效啊
  21.                     else
  22.                             field.setEditable(true);
  23.                 }
  24.         });
  25.         

  26.         this.add(field);
  27.         this.setLayout(new FlowLayout());
  28.         this.setBounds(100, 200, 300, 100);
  29.         this.setVisible(true);
  30.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31.     }

  32.     public static void main(String[] args)
  33.     {
  34.             new Demo();
  35.     }

  36. }
复制代码

作者: peerless2012    时间: 2013-6-17 10:26
楼主把JTextField改为TestField就好了,下面是我修改的
  1. import java.awt.FlowLayout;
  2. import java.awt.TextField;
  3. import java.awt.event.KeyAdapter;
  4. import java.awt.event.KeyEvent;

  5. import javax.swing.JFrame;
  6. public class Test5 extends JFrame {
  7.         private TextField field;
  8.       public Demo() {
  9.                
  10.                 init();
  11.         }
  12.       private void init() {
  13.               field = new TextField(10);
  14.          
  15.           this.add(field);
  16.           this.setLayout(new FlowLayout());
  17.           this.setBounds(100, 200, 300, 100);
  18.           MyEvent();
  19.           this.setVisible(true);
  20.           this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  21.         }
  22.         private void MyEvent(){
  23.                 field.addKeyListener(new KeyAdapter() {
  24.                 //添加事件监听
  25.                 public void keyPressed(KeyEvent e)
  26.                 {
  27.                         System.out.println(e.getKeyCode());
  28.                         if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9))
  29.                                 e.consume();
  30.                 }
  31.         });
  32.         }
  33.         

  34.         public static void main(String[] args)
  35.         {
  36.                 new Demo();
  37.         }

  38. }
复制代码

作者: 小权    时间: 2013-6-17 10:41
First 发表于 2013-6-17 09:10
该问题主要是由TextField 和 JTextField 不同引起的
楼主可以把JTextField 改为TextField;
还可以把e.consu ...

JTextField就不能实现吗?非要改?
作者: 小权    时间: 2013-6-17 10:41
peerless2012 发表于 2013-6-17 10:26
楼主把JTextField改为TestField就好了,下面是我修改的

JTextField就不能实现吗?非要改?
作者: peerless2012    时间: 2013-6-17 10:54
小权 发表于 2013-6-17 10:41
JTextField就不能实现吗?非要改?

目前我只知都这样。。。。。。。。。。你可以再研究研究,有结果的话分享一下啊
作者: First    时间: 2013-6-17 11:34
楼主请认真点看
用JTextField可以的
我的代码不就用的是JTextField吗????
作者: 小权    时间: 2013-6-17 11:35
好找到解决的办法了
  1. public class JTextFieldtest5 extends JFrame {

  2.         public JTextFieldtest5() {
  3.                 JTextField field = new JTextField(10);
  4.                 field.addKeyListener(new KeyAdapter() {
  5.                         public void keyTyped(KeyEvent e)
  6.                         {
  7.                                 String key = "0123456789";
  8.                                 if (key.indexOf(e.getKeyChar()) < 0) {
  9.                                         e.consume();
  10.                                 }

  11.                         }

  12.                 });

  13.                 this.add(field);
  14.                 this.setLayout(new FlowLayout());
  15.                 this.setBounds(100, 200, 300, 100);
  16.                 this.setVisible(true);
  17.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  18.         }

  19.         public static void main(String[] args)
  20.         {
  21.                 new JTextFieldtest5();
  22.         }

  23. }
复制代码
这么做可以解决,但不知道是不是最好的
作者: 小权    时间: 2013-6-17 11:46
peerless2012 发表于 2013-6-17 10:54
目前我只知都这样。。。。。。。。。。你可以再研究研究,有结果的话分享一下啊 ...

解决了,在下面了
作者: 小权    时间: 2013-6-17 11:53
First 发表于 2013-6-17 11:34
楼主请认真点看
用JTextField可以的
我的代码不就用的是JTextField吗????

额,看错了,可以实现,你知道为什么那个consumer()会无效吗?。不过还是谢谢了
作者: 孙百鑫    时间: 2013-6-22 01:43
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




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