gpt4 book ai didi

input - 在 JavaFX 文本字段中限制输入的推荐方法

转载 作者:行者123 更新时间:2023-12-04 03:04:35 24 4
gpt4 key购买 nike

问题似乎是 this 的副本。但我的问题是我通过两种方式在 JavaFX 中开发了一个整数文本字段。代码如下

public class FXNDigitsField extends TextField
{
private long m_digit;
public FXNDigitsField()
{
super();
}
public FXNDigitsField(long number)
{
super();
this.m_digit = number;
onInitialization();
}

private void onInitialization()
{
setText(Long.toString(this.m_digit));
}

@Override
public void replaceText(int startIndex, int endIndex, String text)
{
if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
super.replaceText(startIndex, endIndex, text);
}
}

@Override
public void replaceSelection(String text)
{
if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
super.replaceSelection(text);
}
}
}

第二种方法是添加一个事件过滤器。

给出了代码片段。
 // restrict key input to numerals.
this.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
@Override public void handle(KeyEvent keyEvent) {
if (!"0123456789".contains(keyEvent.getCharacter())) {
keyEvent.consume();
}
}
});

我的问题是这样做的诽谤方式是什么?谁能帮我捡起正确的?

最佳答案

在 TextField 中添加验证的最佳方式是第三种方式。
此方法让 TextField 完成所有处理(复制/粘贴/撤消安全)。
它不需要您扩展 TextField 类。
它允许您决定在每次更改后如何处理新文本
(将其插入逻辑,或返回到先前的值,甚至对其进行修改)。

// fired by every text property changes
textField.textProperty().addListener(
(observable, oldValue, newValue) -> {
// Your validation rules, anything you like
// (! note 1 !) make sure that empty string (newValue.equals(""))
// or initial text is always valid
// to prevent inifinity cycle
// do whatever you want with newValue

// If newValue is not valid for your rules
((StringProperty)observable).setValue(oldValue);
// (! note 2 !) do not bind textProperty (textProperty().bind(someProperty))
// to anything in your code. TextProperty implementation
// of StringProperty in TextFieldControl
// will throw RuntimeException in this case on setValue(string) call.
// Or catch and handle this exception.

// If you want to change something in text
// When it is valid for you with some changes that can be automated.
// For example change it to upper case
((StringProperty)observable).setValue(newValue.toUpperCase());
}
);

关于input - 在 JavaFX 文本字段中限制输入的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15615890/

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