> Jednak nie mogę znaleźć niczego w API JavaFX, które pozwoli mi to zrobić?
Komponent PasswordField
nie wyświetla domyślnie zamaskowanego tekstu. Jednak można użyć PasswordField
z TextField
i przełączać zamaskowany/niezamaskowany tekst, używając odpowiednio tych składników. Gdzie niezamaskowany tekst jest pokazywany przez TextField
, jak w przykładzie poniżej.
> Chciałbym użyć TextField że wyświetlenie ostatnio wciśnięty klawisz dla tylko pół sekundy lub do następnego naciśnięcia klawisza, a następnie jest on maskować wszystkie poprzednie dane wprowadzone przez użytkownika.
Od PasswordField
sam w sobie jest rozszerzoną wersją TextField
. Zawsze możesz zbudować własne pole tekstowe z własnymi właściwościami.
> jest jakiś sposób dla mnie zdobyć OS zależnej (myślę, że to jest OS zależne ??) hasło echo znaków należy użyć?
Szczerze mówiąc, nie złapałem tego, co tu mówisz. Możesz śledzić zmiany tekstu, dodając detektor zmian do PasswordField.textPrperty()
i robić animacje, zegary itp. Możesz zastąpić domyślną maskę wypunktowania, rozszerzając PasswordFieldSkin
i używając jej poprzez CSS -fx-skin
.Patrz definicja kulą w swojej source here:
public class PasswordFieldSkin extends TextFieldSkin {
public static final char BULLET = '\u2022';
public PasswordFieldSkin(PasswordField passwordField) {
super(passwordField, new PasswordFieldBehavior(passwordField));
}
@Override protected String maskText(String txt) {
TextField textField = getSkinnable();
int n = textField.getLength();
StringBuilder passwordBuilder = new StringBuilder(n);
for (int i=0; i<n; i++) {
passwordBuilder.append(BULLET);
}
return passwordBuilder.toString();
}
}
Wreszcie Oto inauguracją aplikację demonstracyjną pokazując znaki hasła za pomocą wiązań:
@Override
public void start(Stage primaryStage) {
// text field to show password as unmasked
final TextField textField = new TextField();
// Set initial state
textField.setManaged(false);
textField.setVisible(false);
// Actual password field
final PasswordField passwordField = new PasswordField();
CheckBox checkBox = new CheckBox("Show/Hide password");
// Bind properties. Toggle textField and passwordField
// visibility and managability properties mutually when checkbox's state is changed.
// Because we want to display only one component (textField or passwordField)
// on the scene at a time.
textField.managedProperty().bind(checkBox.selectedProperty());
textField.visibleProperty().bind(checkBox.selectedProperty());
passwordField.managedProperty().bind(checkBox.selectedProperty().not());
passwordField.visibleProperty().bind(checkBox.selectedProperty().not());
// Bind the textField and passwordField text values bidirectionally.
textField.textProperty().bindBidirectional(passwordField.textProperty());
VBox root = new VBox(10);
root.getChildren().addAll(passwordField, textField, checkBox);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
prostu starał dupę kopać demo. Działa bezbłędnie. Czy nie możesz edytować i aktualizować odpowiedzi, dodając komentarze na temat zadanych pytań? Jeśli tak, mogę sprawdzić twoją odpowiedź jako zaakceptowaną odpowiedź. Wiele razy dla twojego demo !! –
@MartinAndersson. Pewnie. Niestety jestem nieobecny przez kilka dni. Będę aktualizować moją odpowiedź z komentarzami i odnośnikami jak najszybciej. –
@MartinAndersson. Zobacz aktualizację. –