gpt4 book ai didi

java - 控制键盘输入到 javafx TextField

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:34 25 4
gpt4 key购买 nike

我想控制 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);
}
}
}

注意:我已阅读 What is the recommended way to make a numeric TextField in JavaFX?这篇文章和这个解决方案对我不起作用。它只有在输入数字后才会被触发。这意味着有人可以在框中输入字母文本,并且在他们将焦点从文本字段移开之前它会一直允许。此外,他们可以输入大于允许的数字,但验证不会在每次按键时发生,而是在焦点转移(“更改”事件)之后发生。

最佳答案

最好的方法是:

    @FXML
private TextField txt_Numeric;
@FXML
private TextField txt_Letters;

@Override
public void initialize(URL url, ResourceBundle rb) {
/* add Event Filter to your TextFields **************************************************/
txt_Numeric.addEventFilter(KeyEvent.KEY_TYPED , numeric_Validation(10));
txt_Letters.addEventFilter(KeyEvent.KEY_TYPED , letter_Validation(10));
}

/* Numeric Validation Limit the characters to maxLengh AND to ONLY DigitS *************************************/
public EventHandler<KeyEvent> numeric_Validation(final Integer max_Lengh) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
TextField txt_TextField = (TextField) e.getSource();
if (txt_TextField.getText().length() >= max_Lengh) {
e.consume();
}
if(e.getCharacter().matches("[0-9.]")){
if(txt_TextField.getText().contains(".") && e.getCharacter().matches("[.]")){
e.consume();
}else if(txt_TextField.getText().length() == 0 && e.getCharacter().matches("[.]")){
e.consume();
}
}else{
e.consume();
}
}
};
}
/*****************************************************************************************/

/* Letters Validation Limit the characters to maxLengh AND to ONLY Letters *************************************/
public EventHandler<KeyEvent> letter_Validation(final Integer max_Lengh) {
return new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
TextField txt_TextField = (TextField) e.getSource();
if (txt_TextField.getText().length() >= max_Lengh) {
e.consume();
}
if(e.getCharacter().matches("[A-Za-z]")){
}else{
e.consume();
}
}
};
}
/*****************************************************************************************/

祝你好运。

关于java - 控制键盘输入到 javafx TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com