如何使用复选框显示 javafx 中密码字段中的内容 [英] How do I show contents from the password field in javafx using checkbox

查看:16
本文介绍了如何使用复选框显示 javafx 中密码字段中的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一名学习 java 和 javafx 的学生,如何使用复选框在密码字段中显示密码?我使用 gluon scenebuilder 作为我的 fxml 编辑器

Im a student studying java and javafx, how do I show the password in the passwordfield using a checkbox? I am using gluon scenebuilder as my fxml editor

推荐答案

上面列出的重复项是为了正确但更复杂的方法.在这个答案中,我展示了两个例子.一个带有 CheckBox,另一个带有全视之眼.眼睛是使用 StackPane 来分层节点.对于 CheckBox 解决方案,在 StackPane 中放置一个 TextField 和一个 PasswordField.带来 textfield tofront 当检查 checkbox 时使用 passwordfield 设置其文本.未选中CheckBox 时清除TextField 并将PasswordField toFront 移动.对于 All-seeing eye 示例,使用相同的想法,但添加一个 ImageView 并始终保留 ImageView toFront.

The duplicate is listed above for the correct but more complicated way of doing this. In this answer, I am showing two examples. One with a CheckBox and the other with the all-seeing eye. The eye is to use a StackPane to layer the node. For the CheckBox solution, put a TextField and then a PasswordField in the StackPane. Bring the TextField toFront when the CheckBox is checked and set its text using the PasswordField. Clear the TextField when the CheckBox is not checked and move the PasswordField toFront. For the All-seeing eye example, use the same ideas but add an ImageView and always keep the ImageView toFront.

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class TestingGround extends Application
{
    Image image = new Image("https://previews.123rf.com/images/andrerosi/andrerosi1905/andrerosi190500216/123158287-eye-icon-vector-look-and-vision-icon-eye-vector-icon.jpg");

@Override
public void start(Stage primaryStage)
{
    HBox passwordControl1 = createPasswordFieldWithCheckBox();
    HBox passwordControl2 = createPasswordFieldWithCheckBox();
    StackPane passwordControl3 = createPasswordFieldWithEye();
    StackPane passwordControl4 = createPasswordFieldWithEye();

    VBox root = new VBox(passwordControl1, passwordControl2, passwordControl3, passwordControl4);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args)
{
    launch(args);
}

HBox createPasswordFieldWithCheckBox()
{
    PasswordField passwordField = new PasswordField();
    passwordField.setPrefHeight(50);
    TextField textField = new TextField();
    textField.setPrefHeight(50);
    passwordField.textProperty().bindBidirectional(textField.textProperty());

        StackPane stackPane = new StackPane(textField, passwordField);
        CheckBox checkBox = new CheckBox();
        checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue) {
                textField.toFront();
            }
            else {
                passwordField.toFront();
            }
        });

        HBox root = new HBox(stackPane, checkBox);
        root.setSpacing(5);
        root.setAlignment(Pos.CENTER);

        return root;
    }

    StackPane createPasswordFieldWithEye()
    {
        PasswordField passwordField = new PasswordField();
        passwordField.setPrefHeight(50);
        TextField textField = new TextField();
        passwordField.textProperty().bindBidirectional(textField.textProperty());
        textField.setPrefHeight(50);
        ImageView imageView = new ImageView(image);
        imageView.setFitHeight(32);
        imageView.setFitWidth(32);
        StackPane.setMargin(imageView, new Insets(0, 10, 0, 0));
        StackPane.setAlignment(imageView, Pos.CENTER_RIGHT);
        imageView.setOnMousePressed((event) -> {
            textField.toFront();
            imageView.toFront();
        });

        imageView.setOnMouseReleased((event) -> {
            passwordField.toFront();
            imageView.toFront();
        });

        StackPane root = new StackPane(textField, passwordField, imageView);

        return root;
    }
}

这篇关于如何使用复选框显示 javafx 中密码字段中的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆