因此,第一个和最后一个输入应该是字母,并且它们之间应该只有数字。这是我的代码:
tf.textProperty().addListener(new ChangeListener<String>() {
public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
String text_of_first_letter = tf.getText().substring(0, 1);
if (tf.getText().length() > 1 ) {
if(!newValue.matches("\\d*")) {
tf.setText(newValue.replaceFirst("[^\\d]", ""));
}
}
else if(tf.getText().length() == 1){
System.out.println("ktu");
tf.setText(newValue.replaceFirst("[^\\d]", text_of_first_letter));
}
}
});
您可以使用TextFormatter
和String's
matches
。
如果中的文本TextField
不符合这三个条件之一Regex
,则显示旧文本。
case 1: newVal.matches("[A-z]") -> Single alpha character
case 2: newVal.matches("[A-z]\\d+") -> Alpha character followed by digits
case 3: newVal.matches("[A-z]\\d+[A-z]") -> Alpa character followed by digits than another alpha character.
完整的应用
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication149 extends Application
{
@Override
public void start(Stage primaryStage)
{
TextField textField = new TextField();
textField.setTextFormatter(new TextFormatter<>(c
-> {
if (c.getControlNewText().isEmpty()) {
return c;
}
if (c.getControlNewText().matches("[A-z]") || c.getControlNewText().matches("[A-z]\\d+") || c.getControlNewText().matches("[A-z]\\d+[A-z]")) {
return c;
}
else {
return null;
}
}));
StackPane root = new StackPane(textField);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}
**更新:更改为TextFormatter
。@kleopatra表示这是实现此目标的正确方法。
这似乎是件很简单的事情,但我在任何地方都找不到。我想要一个简单的程序(比如自动热键,但我找不到使用自动热键的方法),当我按下某个键时,它会冻结我的键盘和鼠标(无论我当时按什么键,即使我释放了实际的键/按钮),并将其冻结,直到我再次按下该键(选择的键从未被其他程序视为按下)。 我只是希望这样,如果游戏希望我按住一些按钮,我可以按下按钮,按下指定的键,松手,然后在我应该松开按钮的时候再次按下键。
我希望“请输入一个带有字母S的句子”循环,直到用户输入字母“S”
我在这个问题上也有同样的问题 如何使用android中的回收器视图将事件放在日历中 //Event.java 我尝试了很多,但它甚至不工作。我的事件。我要在另一个适配器中使用java。也许在onBindViewHolder中。
但是,在我的项目中,我希望我的业务逻辑能够访问数据源,但我希望Spring Batch不使用数据源。这可能吗? 这个家伙也有类似的问题:Spring boot+Spring batch没有DataSource
我有这个功能: 这是为了防止用户在引用值上创建重复的Compra。 我在这里使用它: 当前用户正在创建“Compra”,但如果Compra被取消,您应该能够使用“Referenceia”值,因为Compra已被删除。然而,即使是thouh Compra被取消,用于该Compra的“参考”也不能再使用了。 我想添加一个条件来验证,当Compra'estatus'值为'aprobado'时,用户无法继