密码字段中的子弹到星号

时间:2016-02-28 22:01:23

标签: javafx

是否可以将这些项目符号更改为密码字段中的星号?如果是这样,怎么样? Image

1 个答案:

答案 0 :(得分:6)

遗憾的是,子弹在TextFieldSkin中进行了硬编码,但您可以通过覆盖默认值轻松创建PasswordSkin,如下所示:

import com.sun.javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;

public class PasswordSkin extends TextFieldSkin {
    public PasswordSkin(TextField textField) {
        super(textField);
    }

    protected String maskText(String txt) {
        if (getSkinnable() instanceof PasswordField) {
            int n = txt.length();
            StringBuilder passwordBuilder = new StringBuilder(n);
            for (int i = 0; i < n; i++)
                passwordBuilder.append("*");

            return passwordBuilder.toString();
        } else {
            return txt;
        }
    }
}

要使用它,请拨打setSkin上的PasswordField

PasswordField input = new PasswordField();
input.setSkin(new PasswordSkin(input));

或者,您可以在样式表中包含以下内容,而不是手动设置外观:

.password-field {
    -fx-skin: 'sample.PasswordSkin'
}

确保更新sample.PasswordSkin以反映您的皮肤的完全限定类名。现在,加载样式表的每个场景或节点都不需要手动配置外观。