textField.focusedProperty().addListener((arg0, oldValue, newValue) -> {
if (!newValue) { //when focus lost
if(!textField.getText().matches("[1-5]\\.[0-9]|6\\.0")){
//when it not matches the pattern (1.0 - 6.0)
//set the textField empty
textField.setText("");
}
}
});
你還可以將模式改變爲[1-5](\.[0-9]){0,1}|6(.0){0,1}
然後1,2,3,4,5,6
也將是確定的(不僅1.0,2.0,...
)
更新 這裏是值1(.00)到6一個小的測試應用程序(.00):
public class JavaFxSample extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Enter number and hit the button");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
Label label1To6 = new Label("1.0-6.0:");
grid.add(label1To6, 0, 1);
TextField textField1To6 = new TextField();
textField1To6.focusedProperty().addListener((arg0, oldValue, newValue) -> {
if (!newValue) { // when focus lost
if (!textField1To6.getText().matches("[1-5](\\.[0-9]{1,2}){0,1}|6(\\.0{1,2}){0,1}")) {
// when it not matches the pattern (1.0 - 6.0)
// set the textField empty
textField1To6.setText("");
}
}
});
grid.add(textField1To6, 1, 1);
grid.add(new Button("Hit me!"), 2, 1);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
非常感謝@griFlo,但仍然有一個問題。我不能輸入像「5.0」,「4.7」,「2.8」或「1.9」這樣的值。你知道我該如何告訴程序應該只有兩位小數? – BRsmover
@BRsmover你說的所有的值應該被允許(實際上,我只是用上面的代碼測試它,它的工作原理就是找到)。你的意思是兩位小數?你可以使用這個正則表達式[[1-5](\。[0-9] {1,2}){0,1} | 6(.0 {1,2}){0,1}'(如果我正確理解你的話) – griFlo
對不起,我一定誤解了一些東西......一切都很好!非常感謝你! – BRsmover