欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder

程序员文章站 2022-03-22 19:04:44
对话框的封装使用 "DialogBuilder的Github" 前言 登录需要弹出登录对话框,但是,Jfoenix库使用对话框比较难受,还得动态去生成布局,我想起了Android的对话框生成,便是封装了一个,一行代码即可生成 使用 使用的话,直接一行代码即可 ,下面的几种常用的情况! 只有一个确定按 ......

对话框的封装使用

dialogbuilder的github

前言

登录需要弹出登录对话框,但是,jfoenix库使用对话框比较难受,还得动态去生成布局,我想起了android的对话框生成,便是封装了一个,一行代码即可生成

使用

使用的话,直接一行代码即可 ,下面的几种常用的情况!

  • 只有一个确定按钮,按下esc可以退出
    Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder
//tfoutpath是一个控件(controller)
new dialogbuilder(tfoutpath).settitle("提示").setmessage("登录成功").setnegativebtn("确定").create();
  • 确定和取消按钮,有个onclicklistener监听器负责执行点击按钮后执行的操作
    Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder
new dialogbuilder(tfoutpath).setnegativebtn("取消", new dialogbuilder.onclicklistener() {
            @override
            public void onclick() {
                //点击取消按钮之后执行的动作
            }
        }).setpositivebtn("确定", new dialogbuilder.onclicklistener() {
            @override
            public void onclick() {
                //点击确定按钮之后执行的动作
            }
        }).settitle("提示").setmessage("hello world").create();
  • 更改文字颜色
    Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder
new dialogbuilder(startbtn).settitle("提示").setmessage("hello world").setpositivebtn("确定", "#ff3333").setnegativebtn("取消", "#00ff00").create();

后期有空再更新,更新常用的对话框布局

代码

package wan.utils;

import com.jfoenix.controls.jfxalert;
import com.jfoenix.controls.jfxbutton;
import com.jfoenix.controls.jfxdialoglayout;
import com.sun.istack.internal.nullable;

import javafx.scene.control.control;
import javafx.scene.control.label;
import javafx.scene.layout.vbox;
import javafx.scene.paint.paint;
import javafx.stage.modality;
import javafx.stage.stage;
import javafx.stage.window;

/**
 * @author starsone
 * @date create in  2019/6/2 0002 20:51
 * @description
 */
public class dialogbuilder {
    private string title, message;
    private jfxbutton negativebtn = null;
    private jfxbutton positivebtn = null;
    private window window;
    private jfxdialoglayout jfxdialoglayout = new jfxdialoglayout();
    private paint negativebtnpaint = paint.valueof("#747474");//否定按钮文字颜色,默认灰色
    private paint positivebtnpaint = paint.valueof("#0099ff");

    private jfxalert<string> alert;

    /**
     * 构造方法
     *
     * @param control 任意一个控件
     */
    public dialogbuilder(control control) {
        window = control.getscene().getwindow();
    }

    public dialogbuilder settitle(string title) {
        this.title = title;
        return this;
    }

    public dialogbuilder setmessage(string message) {
        this.message = message;
        return this;
    }

    public dialogbuilder setnegativebtn(string negativebtntext) {
        return setnegativebtn(negativebtntext, null, null);
    }

    /**
     * 设置否定按钮文字和文字颜色
     *
     * @param negativebtntext 文字
     * @param color           文字颜色 十六进制 #fafafa
     * @return
     */
    public dialogbuilder setnegativebtn(string negativebtntext, string color) {
        return setnegativebtn(negativebtntext, null, color);
    }

    /**
     * 设置按钮文字和按钮文字颜色,按钮监听器和
     *
     * @param negativebtntext
     * @param negativebtnonclicklistener
     * @param color                      文字颜色 十六进制 #fafafa
     * @return
     */
    public dialogbuilder setnegativebtn(string negativebtntext, @nullable onclicklistener negativebtnonclicklistener, string color) {
        if (color != null) {
            this.negativebtnpaint = paint.valueof(color);
        }
        return setnegativebtn(negativebtntext, negativebtnonclicklistener);
    }


    /**
     * 设置按钮文字和点击监听器
     *
     * @param negativebtntext            按钮文字
     * @param negativebtnonclicklistener 点击监听器
     * @return
     */
    public dialogbuilder setnegativebtn(string negativebtntext, @nullable onclicklistener negativebtnonclicklistener) {

        negativebtn = new jfxbutton(negativebtntext);
        negativebtn.setcancelbutton(true);
        negativebtn.settextfill(negativebtnpaint);
        negativebtn.setbuttontype(jfxbutton.buttontype.flat);
        negativebtn.setonaction(addevent -> {
            alert.hidewithanimation();
            if (negativebtnonclicklistener != null) {
                negativebtnonclicklistener.onclick();
            }
        });
        return this;
    }

    /**
     * 设置按钮文字和颜色
     *
     * @param positivebtntext 文字
     * @param color           颜色 十六进制 #fafafa
     * @return
     */
    public dialogbuilder setpositivebtn(string positivebtntext, string color) {
        return setpositivebtn(positivebtntext, null, color);
    }

    /**
     * 设置按钮文字,颜色和点击监听器
     *
     * @param positivebtntext            文字
     * @param positivebtnonclicklistener 点击监听器
     * @param color                      颜色 十六进制 #fafafa
     * @return
     */
    public dialogbuilder setpositivebtn(string positivebtntext, @nullable onclicklistener positivebtnonclicklistener, string color) {
        this.positivebtnpaint = paint.valueof(color);
        return setpositivebtn(positivebtntext, positivebtnonclicklistener);
    }

    /**
     * 设置按钮文字和监听器
     *
     * @param positivebtntext            文字
     * @param positivebtnonclicklistener 点击监听器
     * @return
     */
    public dialogbuilder setpositivebtn(string positivebtntext, @nullable onclicklistener positivebtnonclicklistener) {
        positivebtn = new jfxbutton(positivebtntext);
        positivebtn.setdefaultbutton(true);
        positivebtn.settextfill(positivebtnpaint);
        system.out.println("执行setpostivebtn");
        positivebtn.setonaction(closeevent -> {
            alert.hidewithanimation();
            if (positivebtnonclicklistener != null) {
                positivebtnonclicklistener.onclick();//回调onclick方法
            }
        });
        return this;
    }

    /**
     * 创建对话框并显示
     *
     * @return jfxalert<string>
     */
    public jfxalert<string> create() {
        alert = new jfxalert<>((stage) (window));
        alert.initmodality(modality.application_modal);
        alert.setoverlayclose(false);

        jfxdialoglayout layout = new jfxdialoglayout();
        layout.setheading(new label(title));
        layout.setbody(new vbox(new label(this.message)));
        if (negativebtn != null && positivebtn != null) {
            layout.setactions(negativebtn,positivebtn);
        }else {
            if (negativebtn != null) {
                layout.setactions(negativebtn);
            } else if (positivebtn != null) {
                layout.setactions(positivebtn);
            }
        }

        alert.setcontent(layout);
        alert.showandwait();

        return alert;
    }

    public interface onclicklistener {
        void onclick();
    }

}