JavaFX 密码字段将值从项目符号转换为文本字符



我只想显示ToggleButton设置为TRUEPasswordField输入的值,Bullets将转换为Text Character,非常简单。我找到了这个,但不幸的是我是股票,因为com.sun.javafx.scene.control.behavior.PasswordFieldBehavior无法解决。

通常,我们如何或PasswordField如何能够从Bullets转换为Text Character? 有什么功能吗?

您可以堆叠另一个TextField并绑定它们的值。

final StackPane sp = new StackPane();
final PasswordField pwf = new PasswordField();
final TextField tf = new TextField();
final ToggleButton toggle = new ToggleButton();
sp.getChildren().addAll(pwf, tf);
pwf.textProperty().bindBidirectional(tf.textProperty());
pwf.visibleProperty().bind(toggle.selectedProperty().not());
tf.visibleProperty().bind(toggle.selectedProperty());

根据两个输入控件的大小调整策略,可能需要为文本字段调用#setManaged(false)

您必须通过子类化TextFieldSkin并覆盖maskText(String txt)来编写自己的皮肤以返回原始文本而不是项目符号。

下面是一个可执行示例:

package application;
import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.Scene;
import javafx.scene.control.PasswordField;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
HBox root = new HBox();
PasswordField passwordField = new PasswordField();
BooleanProperty showPassword = new SimpleBooleanProperty() {
@Override
protected void invalidated() {
// force maskText to be called
String txt = passwordField.getText();
passwordField.setText(null);
passwordField.setText(txt);
}
};
passwordField.setSkin(new TextFieldSkin(passwordField) {
@Override
protected String maskText(String txt) {
if (showPassword.get()) {
return txt;
}
return super.maskText(txt);
}
});
ToggleButton bulletToggle = new ToggleButton("Show Password");
showPassword.bind(bulletToggle.selectedProperty());
root.getChildren().addAll(passwordField, bulletToggle);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}

最新更新