Javafx实现密码框可视

我们在做登录界面的时候,会用到密码框组件,其中一些会有密码的显示功能。
例如在Google浏览器的设置—>密码中就有这样的功能在这里插入图片描述

当我们按下小眼睛时我们的密码会变成可视,同时小眼睛的图标就会变成小眼睛加杠。如图
在这里插入图片描述
在前端中,我们可以轻松实现这种功能,代码如下
(要先准备两张图片,可自行保存)
在这里插入图片描述
在这里插入图片描述

前端代码如下

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <style>
        label {
            font-size: 20px;
        }
        input {
            height: 20px;
            border: 1px black solid;
            font-size: 10px;
        }
    </style>
</head>
<body>
<form action="#">
    <label for="user">账号:</label>
    <input type="text" id="user"><br><br>
    <label for="pass">密码:</label>
    <input type="password" id="pass">&nbsp;
    <img src="show.png" width="25px" style="vertical-align: middle" id="show" onclick="show_pwd()">
</form>
<script>
    function show_pwd() {
        var show_path="show.png";
        var noshow_path="noshow.png";
        var pwd_field=document.getElementById("pass");
        var show_btn=document.getElementById("show");
        var list=show_btn.src.split("/");
        var photo_path=list[list.length-1];
        if (photo_path==show_path){
            pwd_field.type="text";
            show_btn.src=noshow_path;
        }else {
            pwd_field.type="password";
            show_btn.src=show_path;
        }
    }
</script>
</body>
</html>

本人不是学前端的,写的不好请见谅

虽然代码写的比较垃圾,但也能实现我们所需的功能

那么,我们如何用javafx实现这种效果

在javafx中,我们的密码表示直接使用PasswordField,PasswordField继承了TextField的子类。

我们可以通过隐藏和显示的交替实现我们的效果

我们默认在窗口上显示一个PasswordField,在相同位置还有一个隐藏的TextField。当我们按下按钮时,隐藏PasswordField,显示TextField,并将PasswordField里的内容放到TextField里来。相反同理。

组件是否可视

我们可以通过setVisible方法来设置组件是否可视,传递的参数是一个布尔值。传递的参数为true则为可视,false则为不可视

例如

public void start(Stage primaryStage) throws Exception {
        AnchorPane root=new AnchorPane();

        Button b=new Button("button");
        b.setVisible(false);
        root.getChildren().add(b);

        Scene scene=new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setWidth(800);
        primaryStage.setHeight(800);
        primaryStage.show();
    }

这个时候运行结果是一个空白的窗口,里面什么都没有,因为按钮设置了setVisiblefalse,所以按钮被隐藏

图片按钮

我们可以在构造按钮时给按钮添加图片

Image image1=new Image("file:show.png");
ImageView view=new ImageView(image1);
Button button=new Button("",view);

这样我们创建了一个带有图片的按钮

我们也可以用ImageView对象的getImage() 方法获取图片对象

还是上面的代码,加上一行

Image image1=new Image("file:show.png");
ImageView view=new ImageView(image1);
Button button=new Button("",view);
System.out.println(view.getImage()==image1);

此时这串代码便会输出true






代码如下

public void start(Stage primaryStage) throws Exception {
        AnchorPane root=new AnchorPane();

        PasswordField pwd_pield_1=new PasswordField();
        pwd_pield_1.setPrefWidth(200);
        pwd_pield_1.setPrefHeight(40);
        pwd_pield_1.setLayoutX(0);
        pwd_pield_1.setLayoutY(50);
        pwd_pield_1.setVisible(true);


        TextField pwd_pield_2=new TextField();
        pwd_pield_2.setPrefWidth(200);
        pwd_pield_2.setPrefHeight(40);
        pwd_pield_2.setLayoutX(0);
        pwd_pield_2.setLayoutY(50);
        pwd_pield_2.setVisible(false);


        Image image1=new Image("file:show.png");
        Image image2=new Image("file:noshow.png");
        ImageView view=new ImageView(image1);

        Button button=new Button("",view);
        button.setPrefWidth(40);
        button.setPrefHeight(40);
        button.setLayoutX(205);
        button.setLayoutY(50);
        button.setBackground(null);
        button.setBorder(null);
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                if (view.getImage()==image1){
                    String s=pwd_pield_1.getText();
                    pwd_pield_2.setVisible(true);
                    pwd_pield_2.requestFocus();
                    pwd_pield_2.setText(s);
                    pwd_pield_2.positionCaret(s.length());
                    pwd_pield_1.setVisible(false);
                    view.setImage(image2);
                }else {
                    String s=pwd_pield_2.getText();
                    pwd_pield_1.setVisible(true);
                    pwd_pield_1.requestFocus();
                    pwd_pield_1.setText(s);
                    pwd_pield_1.positionCaret(s.length());
                    pwd_pield_2.setVisible(false);
                    view.setImage(image1);
                }
            }
        });

        root.getChildren().add(pwd_pield_1);
        root.getChildren().add(pwd_pield_2);
        root.getChildren().add(button);


        Scene scene=new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setWidth(600);
        primaryStage.setHeight(600);
        primaryStage.show();
    }




小白代码,不喜勿喷

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现平铺效果,可以使用JavaFX中的BorderPane布局和ImageView控件。 1. 创建一个BorderPane布局对象,设置其背景色为透明。 ```java BorderPane borderPane = new BorderPane(); borderPane.setStyle("-fx-background-color: transparent;"); ``` 2. 创建一个ImageView控件对象,用于显示要平铺的边图片。 ```java ImageView imageView = new ImageView("path/to/border/image.png"); ``` 3. 设置ImageView的拉伸属性为“拉伸到填满整个区域”。 ```java imageView.setPreserveRatio(false); imageView.setFitWidth(Double.MAX_VALUE); imageView.setFitHeight(Double.MAX_VALUE); ``` 4. 将ImageView添加到BorderPane的每个边缘区域上。 ```java borderPane.setTop(imageView); borderPane.setBottom(imageView); borderPane.setLeft(imageView); borderPane.setRight(imageView); ``` 完整代码示例: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class BorderTileExample extends Application { @Override public void start(Stage primaryStage) { BorderPane borderPane = new BorderPane(); borderPane.setStyle("-fx-background-color: transparent;"); ImageView imageView = new ImageView("path/to/border/image.png"); imageView.setPreserveRatio(false); imageView.setFitWidth(Double.MAX_VALUE); imageView.setFitHeight(Double.MAX_VALUE); borderPane.setTop(imageView); borderPane.setBottom(imageView); borderPane.setLeft(imageView); borderPane.setRight(imageView); Scene scene = new Scene(borderPane, 400, 400); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 需要将 "path/to/border/image.png" 替换为你的边图片路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值