的自動校正我有一個字段,並在其上的過濾器,只允許數字和,
雙值輸入
我想,如果我鍵入1,
,我自動獲得1,0
當我離開文本字段。 我可以解析它並檢查一個子串是否最後有一個,
。但在我看來,這不是一個很好的方法。有沒有更好的方法來做到這一點?
的自動校正我有一個字段,並在其上的過濾器,只允許數字和,
雙值輸入
我想,如果我鍵入1,
,我自動獲得1,0
當我離開文本字段。 我可以解析它並檢查一個子串是否最後有一個,
。但在我看來,這不是一個很好的方法。有沒有更好的方法來做到這一點?
文本格式使用轉換器使用的是過濾輸入:(。顯然,過濾器,可以在這裏提高,如避免多個小數點分隔符輸入)
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.function.UnaryOperator;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class DecimalTextField extends Application {
@Override
public void start(Stage primaryStage) {
// decimal formatter for default locale:
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMinimumFractionDigits(1);
DecimalFormatSymbols symbols = decimalFormat.getDecimalFormatSymbols() ;
char decimalSep = symbols.getDecimalSeparator() ;
UnaryOperator<Change> filter = change -> {
for (char c : change.getText().toCharArray()) {
if ((! Character.isDigit(c)) && c != decimalSep) {
return null ;
}
}
return change ;
};
StringConverter<Double> converter = new StringConverter<Double>() {
@Override
public String toString(Double object) {
return object == null ? "" : decimalFormat.format(object);
}
@Override
public Double fromString(String string) {
try {
return string.isEmpty() ? 0.0 : decimalFormat.parse(string).doubleValue();
} catch (ParseException e) {
return 0.0 ;
}
}
};
TextFormatter<Double> formatter = new TextFormatter<>(converter, 0.0, filter);
TextField textField = new TextField();
textField.setTextFormatter(formatter);
VBox root = new VBox(10, textField, new TextArea());
root.setAlignment(Pos.CENTER);
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我認爲最好的方法是將字符串轉換爲雙精度型,然後使用DecimalFormat將雙精度型轉換回字符串。這樣你就知道你會知道這個號碼是你想要的格式。
你使用的是「TextFormatter」嗎?如果是這樣,提供一個轉換器應該爲你做這個。 (並且,我們之前還沒有過兩次嗎?) –