【问题标题】:IN JAVA swing textbox only accept numeric values and one time ( +, - , . ) [duplicate]IN JAVA swing文本框只接受数值和一次(+,-,。)[重复]
【发布时间】:2015-01-07 16:15:23
【问题描述】:

/* 我正在尝试使用 Java/eclipse 制作一个 TEXTBOX。 文本框仅通过键盘接受数值 那就是使用摇摆 + 在“第一位置”唱“单次” - 在“第一位置”唱“单次” .在“任何位置”的“单次”期间 并删除和退格完美地工作 */

import javax.swing.*;  
import java.awt.event.KeyEvent;  
import java.awt.event.KeyListener;  

public class NumericBox extends JApplet{ 
    //making textfield
    static JTextField tf = new JTextField();  
    //main start
    public static void main(String arh[]){  

        NumericBox g = new NumericBox();  
        Handle h = g.new Handle();  
        JFrame f = new JFrame();  //frame
        JPanel p = new JPanel();  //pannel

        tf.setColumns(5);  
        tf.addKeyListener(h);  

        p.add(tf);    
        f.add(p);  
        f.setSize(200,100);  
        f.setVisible(true);  

    }//end of main method  
   // to use only numaric key implementation

    private class Handle implements KeyListener{  

        public void keyTyped(KeyEvent e) {
            char vChar = e.getKeyChar();
            if (!(Character.isDigit(vChar)
                  || (vChar == KeyEvent.VK_BACK_SPACE)
                  || (vChar == KeyEvent.VK_CLEAR)
                  || (vChar == KeyEvent.VK_PERIOD)
                  || (vChar == KeyEvent.VK_PLUS)
                  || (vChar == KeyEvent.VK_MINUS))) {
                getToolkit().beep();
                e.consume();
            }

       /*    if(vChar == KeyEvent.VK_PERIOD){
                            if(i==1)
                                e.consume();
                            else
                                i=1;
                        }
         */ 
        }

        public void keyPressed(KeyEvent e) {}  //keyPressed  events
        public void keyReleased(KeyEvent e) {}  //keyReleased events

    }//end of inner class  

}//end of outer class  

【问题讨论】:

  • 试图通过过滤关键事件来做到这一点是一种脆弱的方法(例如,考虑粘贴到字段)。以here 为例,看看答案。
  • + 在“第一位置”唱“单次” - 在“第一位置”唱“单次”。在“任何位置”的“单次”期间仅在我的代码 +,-, 中不起作用。被重复并且 +,- 在 diff-diff pos 上是错误的
  • 使用 DocumentFilter,并在其中测试Double.parseDouble(...)。详情请见link

标签: java swing textbox keypress keyevent


【解决方案1】:

最好通过正则表达式来验证您的文本。至于捕捉值的变化,请参考 Swing 提供的底层文档,参考这里的示例:https://stackoverflow.com/a/3953219/1843508

【讨论】:

    【解决方案2】:

    您可以使用JFormattedTextField 或如@Ofer Lando 所说,使用regex(正则表达式)

    例子,

    private boolean containsNumber(String sentence)
    {
        Pattern patt = Pattern.compile(".*?[0-9].*");
        Matcher m = patt.matcher(sentence);
        return m.matches();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 2022-06-28
      • 2011-06-15
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多