在TextField中用Text替换Text

时间:2013-11-26 10:49:27

标签: javafx-2 javafx javafx-8

我有这个字段,我在其中插入端口号。我想将字符串自动转换为数字:

fieldNport = new TextField();
    fieldNport.setPrefSize(180, 24);
    fieldNport.setFont(Font.font("Tahoma", 11));
    grid.add(fieldNport, 1, 1);

你能告诉我怎么做吗?我在堆栈溢出中找不到合适的例子。

编辑:

也许这个:

 fieldNport.textProperty().addListener(new ChangeListener()
        {
            @Override
            public void changed(ObservableValue o, Object oldVal, Object newVal)
            {
                try
                {
                    int Nport = Integer.parseInt((String) oldVal);
                }
                catch (NumberFormatException e)
                {

                }
            }
        });

3 个答案:

答案 0 :(得分:5)

从JavaFX 8u40开始,您可以在文本字段中设置TextFormatter对象:

UnaryOperator<Change> filter = change -> {
    String text = change.getText();

    if (text.matches("[0-9]*")) {
        return change;
    }

    return null;
};
TextFormatter<String> textFormatter = new TextFormatter<>(filter);
fieldNport = new TextField();
fieldNport.setTextFormatter(textFormatter);

这可以避免在将更改侦听器添加到text属性并修改该侦听器中的文本时获得的子类化和重复更改事件。

答案 1 :(得分:2)

你可以这样写:

fieldNPort.text.addListener(new ChangeListener(){
        @Override public void changed(ObservableValue o,Object oldVal, Object newVal){
             //Some Code
             //Here you can use Integer.parseInt methods inside a try/catch 
             //because parseInt throws Exceptions
        }
      });

以下是JavaFX中有关属性和监听器的所有内容:
http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm
如果您有任何疑问,我将很乐意为您提供帮助。

答案 2 :(得分:2)

也许这就是你所需要的:

fieldNPort= new TextField()
    {
        @Override
        public void replaceText(int start, int end, String text)
        {
            if (text.matches("[0-9]*"))
            {
                super.replaceText(start, end, text);
            }
        }

        @Override
        public void replaceSelection(String text)
        {
            if (text.matches("[0-9]*"))
            {
                super.replaceSelection(text);
            }
        }
    };

这将限制用户输入除数字之外的任何内容(您可以根据需要修改正则表达式),然后您不必担心Integer.parseInt抛出任何异常。