控制键盘输入到javafx TextField中

我想控制Javafx TextField中的输入,以便只允许数字输入,这样,如果超出了最大字符数,则不会对文本框进行任何更改。

编辑:根据评论中的建议,我使用了JavaFX项目负责人建议的方法。阻止输入字母非常有用。我只需要它也可以过滤特殊字符。我尝试将过滤器更改为(text.matchs(“

[0-9]”),但不允许输入退格键。

edit2:找出一个特殊字符和长度的过滤器。这是我的最终代码。感谢您的投入。

这是我创建的TextField类:

import javafx.scene.control.TextField;

public class AttributeTextField extends TextField{

public AttributeTextField() {

setMinWidth(25);

setMaxWidth(25);

}

public void replaceText(int start, int end, String text) {

String oldValue = getText();

if (!text.matches("[a-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {

super.replaceText(start, end, text);

}

if (getText().length() > 2 ) {

setText(oldValue);

}

}

public void replaceSelection(String text) {

String oldValue = getText();

if (!text.matches("[a-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {

super.replaceSelection(text);

}

if (getText().length() > 2 ) {

setText(oldValue);

}

}

}

注意:我已阅读在JavaFX中创建数字TextField的推荐方法是什么?这个帖子,这个解决方案对我不起作用。输入号码后才会触发。意思是有人可以在框中输入字母文本,并且直到他们将焦点从文本字段移开为止。同样,他们可以输入比允许的数字大的数字,但是验证不是在每次按键时进行,而是在焦点移动(“更改”事件)之后进行。

回答:

最终解决方案。禁止使用字母和特殊字符,并限制字符数。

import javafx.scene.control.TextField;

public class AttributeTextField extends TextField{

public AttributeTextField() {

setMinWidth(25);

setMaxWidth(25);

}

public void replaceText(int start, int end, String text) {

String oldValue = getText();

if (!text.matches("[A-Za-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {

super.replaceText(start, end, text);

}

if (getText().length() > 2 ) {

setText(oldValue);

}

}

public void replaceSelection(String text) {

String oldValue = getText();

if (!text.matches("[A-Za-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {

super.replaceSelection(text);

}

if (getText().length() > 2 ) {

setText(oldValue);

}

}

}

以上是 控制键盘输入到javafx TextField中 的全部内容, 来源链接: utcz.com/qa/405112.html

回到顶部