java textfield 文字居中_关于java:限制TextField中的文本输入

如何将文本输入到TextField中的唯一有效字符限制为数字和字母? 我已经看到了很多答案,并且尝试了其中一个,但是由于某种原因,我无法使用退格键。 班级在下面。

private class NoSpaceField extends TextField {

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

String old = getText();

if (text.matches("[A-Za-z0-9\b]")) {

super.replaceText(start, end, text);

}

if (getText().length() > 16)

setText(old);

positionCaret(getText().length());

}

public void replaceSelection(String text) {

String old = getText();

if (text.matches("[A-Za-z0-9\b]")) {

super.replaceSelection(text);

}

if (getText().length() > 16)

setText(old);

positionCaret(getText().length());

}

}

我在RegEx上很糟糕,也不知道如何将退格键添加为有效字符。 另外,我出于不同的目的使用了上面的类(稍作修改),并且效果很好。

您是否看到过这个线程,stackoverflow.com/questions/17438100/

@ chris85我尝试了[A-Za-z0-9\b],但是没有做任何事情,增加反斜杠的数量只是抛出了PatternSyntaxException或什么都不做。

如果您使用的是Java 8u40,则可以使用TextFormatter。 e。像这样的过滤器:

TextField textField = new TextField();

TextFormatter formatter = new TextFormatter( change -> {

change.setText(change.getText().replaceAll("[^a-zA-Z0-9]",""));

return change;

});

textField.setTextFormatter(formatter);

当您e时,这也解决了问题。 G。将一些无效的文本粘贴到文本字段中。

如果您使用的是较低的jdk,则可以尝试使用Christian Schudt的RestrictiveTextField。允许您限制字符并仍使用光标键,退格键等。

有趣;我还没有看到这个。另外,有没有办法限制可以输入的字符数?

在文本格式化程序处理程序中检查更改文本的长度,如果文本太长,请对其进行修改。但是,使用附加的ChangeListener来限制字符数可能更易于实现。

通过使用空字符串调用replaceText和代表要删除的字符位置的索引来调用字符。由于您的正则表达式与空字符串不匹配,因此删除操作将被忽略。

您可能想要的是接受"零个或多个"有效字符。这样,您将识别一个空字符串,并支持多个字符的复制和粘贴。正则表达式看起来像

private class NoSpaceField extends TextField {

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

String old = getText();

if (text.matches("[A-Za-z0-9]*")) {

super.replaceText(start, end, text);

}

if (getText().length() > 16)

setText(old);

positionCaret(getText().length());

}

public void replaceSelection(String text) {

String old = getText();

if (text.matches("[A-Za-z0-9]*")) {

super.replaceSelection(text);

}

if (getText().length() > 16)

setText(old);

positionCaret(getText().length());

}

}

非常感谢你!

b是退格字符的ASCII码。您可以在正则表达式中使用它。

text.matches(" [A-Za-z0-9 b]")

应该做到的

我已经尝试过了,但是我还是没用;我不知道为什么。我没有在任何地方添加任何EventHandlers,但是我根本不能使用退格键。删除字符的唯一方法是选择多个字符并使用另一个字符。

您运行了哪些测试,并且得到了什么输出?问题可能不在于正则表达式。每次更改字符时都会调用方法replaceText吗?结果是否可能被代码中的其他地方覆盖?

完整的课程可以在这里找到。我只是使用Eclipse运行main方法,然后通过在应用程序的Username框中输入文本进行测试。

看起来您正在调用一个新的NoSpaceField对象,但没有使用您包含的方法来限制用户文本,或者至少在提供的类中的任何位置我都看不到它。

JavaFX在处理输入时使用这些方法。我已经在另一个较小的程序中完成了完全相同的操作,并且工作正常。

如果需要,请考虑对比两个程序以找到主要差异。您是否已验证您的正则表达式有效并且也仅限制字母数字字符?

我已经看过了,他们之间没有区别。但是,您可能会发现我错过的东西,因此该类及其使用的地方在这里和这里。

让我们继续聊天中的讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值