利用JavaFx开发RIA桌面应用-TextField替换PasswordField做密码框

    xiaoxiao2021-11-22  61

    转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53214820

    1.背景

    JavaFx提供了密码框的专用控件PasswordField,但是最近碰到了“兼容性”问题,密码框控件在本机运行正常,但是在把它换到其他机器上运行起来后,各种问题就出现了:

    黑色圆点变为了空心的方框。密码框中内容不显示

    因此,就萌生了用TextField替代PasswordField的想法,不过实现出来的效果是比较密码框时会明文显示密码,这一点暂时还没有找到可行方法,本文仅供大家参考。

    密码框编辑状态:

    焦点移除状态:

    2.实现

    首先,创建密码框替代对象,提供两个功能:

    1、记录真实密码;2、创建TextField控件。 import com.amap.axf.client.event.TextFieldFocusListener; import com.amap.axf.client.event.TextFieldTextListener; import javafx.scene.control.TextField; /** * Created by loongshawn on 2016/11/16. * * NOTE 为了避免密码框显示异常,通过textfield代替 */ public class MyStyleTextFieldOfPassWord { private String password; private String echo; public void setPassword(String password){ this.password = password; } public String getPassword(){ return password; } public void setEcho(String echo){ this.echo = echo; } public String getEcho(){ return echo; } public TextField getPasswordField(){ TextField textField = new TextField(); textField.focusedProperty().addListener(new TextFieldFocusListener(textField,this)); textField.textProperty().addListener(new TextFieldTextListener(textField,this)); //textField.hoverProperty().addListener(new TextFieldHoverListener(textField,this)); return textField; } }

    接下来,需要对TextField控件进行监听,设置两种监听:

    1、焦点监听2、文本监听

    其中“焦点监听”旨在TextField获得焦点时(编辑状态时)显示真实密码或者失去焦点时显示替代符号。

    import com.amap.axf.client.control.MyStyleTextFieldOfPassWord; import com.amap.axf.client.util.StringUtil; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.TextField; /** * Created by loongshawn on 2016/11/17. * * NOTE 密码框监听 */ public class TextFieldFocusListener implements ChangeListener<Boolean> { private TextField textField; private MyStyleTextFieldOfPassWord myStyleTextFieldOfPassWord; public TextFieldFocusListener(TextField textField,MyStyleTextFieldOfPassWord myStyleTextFieldOfPassWord){ this.textField = textField; this.myStyleTextFieldOfPassWord = myStyleTextFieldOfPassWord; } public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { if (newValue){ String password = myStyleTextFieldOfPassWord.getPassword(); if (password != null) { textField.setText(password); } } else { String echo = StringUtil.getEcho(myStyleTextFieldOfPassWord.getPassword()); myStyleTextFieldOfPassWord.setEcho(echo); textField.setText(echo); } } }

    其中“文本监听”旨在TextField获得焦点时(编辑状态时),用户增删该密码时,自动更新MyStyleTextFieldOfPassWord密码框对象的password字段(密码),此密码为明码字符串。

    import com.amap.axf.client.control.MyStyleTextFieldOfPassWord; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.TextField; /** * Created by loongshawn on 2016/11/17. */ public class TextFieldTextListener implements ChangeListener<String> { private TextField textField; private MyStyleTextFieldOfPassWord myStyleTextFieldOfPassWord; public TextFieldTextListener(TextField textField,MyStyleTextFieldOfPassWord myStyleTextFieldOfPassWord){ this.textField = textField; this.myStyleTextFieldOfPassWord = myStyleTextFieldOfPassWord; } public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { if (!textField.getText().equals(myStyleTextFieldOfPassWord.getEcho())){ myStyleTextFieldOfPassWord.setPassword(newValue); } } }

    最后,整套方法中还用到了一个字符串转换的方法,将密码转为替代符号”*”。

    public static String getEcho(String password){ String echo = ""; if (password != null && !password.equals("")){ int length = password.length(); StringBuffer stringBuffer = new StringBuffer(); for (int i=0;i<length;i++){ stringBuffer.append(Constant.PASS_WORD_ECHO); } echo = stringBuffer.toString(); } return echo; }

    3.补充说明

    本文实现的密码框效果

    密码框中输入字符后,密码框失去焦点时,字符变为“*”。鼠标点击密码框时,密码明文会出现。

    若使用过程中,碰到其他问题,欢迎留言讨论,希望能够帮助到你。

    相关文章:

    《 利用JavaFx开发RIA桌面应用-TableView操作》《 利用JavaFx开发RIA桌面应用-Clipboard剪贴板操作》《利用JavaFx开发RIA桌面应用-TextField替换PasswordField做密码框》《利用JavaFx开发RIA桌面应用-半透明界面设计》《利用JavaFx开发RIA桌面应用-加载等待界面设计》《利用JavaFx开发RIA桌面应用-文件拖拽》《利用JavaFx开发RIA桌面应用-改变stage的标题栏的图标》《利用JavaFx开发RIA桌面应用-事件监听》《利用JavaFx开发RIA桌面应用-ComboBox组合编辑框水平增长》《利用JavaFx开发RIA桌面应用-布局说明》《利用JavaFx开发RIA桌面应用-在线资料》
    转载请注明原文地址: https://ju.6miu.com/read-678436.html

    最新回复(0)