Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder
对话框的封装使用
前言
登录需要弹出登录对话框,但是,Jfoenix库使用对话框比较难受,还得动态去生成布局,我想起了Android的对话框生成,便是封装了一个,一行代码即可生成
使用
使用的话,直接一行代码即可 ,下面的几种常用的情况!
- 只有一个确定按钮,按下esc可以退出

//tfOutPath是一个控件(controller)
new DialogBuilder(tfOutPath).setTitle("提示").setMessage("登录成功").setNegativeBtn("确定").create();
- 确定和取消按钮,有个
OnClickListener监听器负责执行点击按钮后执行的操作

new DialogBuilder(tfOutPath).setNegativeBtn("取消", new DialogBuilder.OnClickListener() {
@Override
public void onClick() {
//点击取消按钮之后执行的动作
}
}).setPositiveBtn("确定", new DialogBuilder.OnClickListener() {
@Override
public void onClick() {
//点击确定按钮之后执行的动作
}
}).setTitle("提示").setMessage("hello world").create();
- 更改文字颜色

new DialogBuilder(startBtn).setTitle("提示").setMessage("hello world").setPositiveBtn("确定", "#ff3333").setNegativeBtn("取消", "#00ff00").create();
- 输出路径对话框
点击打开资源管理器,并定位当该目录

new DialogBuilder(tfOutPath).setTitle("提示")
.setMessage("已完成,输出目录为")
.setHyperLink("Q:\\MyBlog")
.setNegativeBtn("确定").create();
- 网页链接对话框
点击打开默认浏览器,跳转到该网址

new DialogBuilder(tfOutPath).setTitle("提示")
.setMessage("已完成,输出目录为")
.setHyperLink("www.cnblogs.com/kexing")
.setNegativeBtn("确定").create();
- 提供一个输入框

new DialogBuilder(btnLogin).setTitle("提示").setMessage("输入").setTextFieldText(new DialogBuilder.OnInputListener() {
@Override
public void onGetText(String result) {
//返回一个输入结果result
//相关的逻辑操作
}
}).setPositiveBtn("确定").setNegativeBtn("取消").create();
后期有空再更新,更新常用的对话框布局
代码
后期更新新功能不会修改这里的代码了,需要的请去我的github项目地址查看
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 java.awt.*;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javafx.scene.control.Control;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.layout.Border;
import javafx.scene.layout.HBox;
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 Hyperlink hyperlink = null;
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;
}
public DialogBuilder setHyperLink(String text) {
hyperlink = new Hyperlink(text);
hyperlink.setBorder(Border.EMPTY);
hyperlink.setOnMouseClicked(event -> {
if (text.contains("www") || text.contains("com") || text.contains(".")) {
try {
Desktop.getDesktop().browse(new URI(text));
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
} else if (text.contains(File.separator)) {
try {
Desktop.getDesktop().open(new File(text));
} catch (IOException e) {
e.printStackTrace();
}
}
});
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));
//添加hyperlink超链接文本
if (hyperlink != null) {
layout.setBody(new HBox(new Label(this.message),hyperlink));
} else {
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();
}
}
Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder的更多相关文章
- Java开发桌面程序学习(一)——JavaFx+Jfoenix初始以及搭建
Java开发桌面程序学习(一)--JavaFx+Jfoenix初始以及搭建 前言 想做一个Java的桌面程序,但是,使用原生的Swing感觉又十分麻烦,那个布局都是拿代码设置,看着十分的乱,偶然的情况 ...
- Java开发桌面程序学习(九)——JavaFxTemplate JavaFx模版 更简单进行JavaFx程序开发
JavaFxTemplate 使用说明 项目基于maven,请确保maven配置成功,否则,可能会出现问题 项目内置了commons-io的jar包,Jfoenix的jar包以及常用的工具类JFxUt ...
- Java开发桌面程序学习(四)——常用应用布局模板和简单分析
布局 前言 刚开始的时候,不知道使用什么布局,发现SceneBuilder其实有8.5版本的,里面就是有提供一个简单的桌面程序模板,8.5可以去官网下载,不过网速好像有点慢,慢慢等吧,官网下载地址 布 ...
- Java开发桌面程序学习(二)————fxml布局与控件学习
JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...
- Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现
css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...
- Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击
javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...
- Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用
启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/k ...
- Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件
ImageView设置图片 JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置 ImageView设置图片 首先,我们让fxml对应的那个controller的java ...
- Java开发桌面程序学习(10)——css样式表使用以及Button使用
css 样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 简 ...
随机推荐
- delphi 10.2 创建并使用资源文件(一共22种格式,RCDATA是自定义格式)
windows支持以下资源格式: 1 2 //下面是 Windows 支持的资源格式: RT_CURSOR = MakeIntResource(1); RT_BITMAP = MakeIntResou ...
- 对Java字符串的探究
问题的出发点 在网上看到一道题: 1 String str = new String("abc"); 以上代码执行过程中生成了多少个 String 对象? 答案写的是两个.&quo ...
- 【剑指offer】直扑克
个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ! "红心A,黑桃3,小王,大王,方 ...
- theano 安装杂记
0. MinGW MinGW:Windows 下的 g++等linux 下的编译工具: Anaconda 下 MinGW 的安装(进行 windows cmd 界面):conda install mi ...
- Asp.net-MyFirstMVCProject详细解释
一个URL要求, ASP.NET MVC引擎将分析URL要使用Controller, 这个Controller(取而代之的是,真实的方法Controller的Action)从数据库或者其它数据源获取数 ...
- Bootstrap 固定在顶部导航条
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- JS trim函数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享
原文:C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享 曾经我做office,不想依赖别人dll,就使用了 Type.GetTypeFromProgID 可以根 ...
- [原译]一步步教你制作WPF圆形玻璃按钮
原文:[原译]一步步教你制作WPF圆形玻璃按钮 图1 1.介绍 从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮.WPF最好的一个方面就是允许自定义任何控件的样式.用了一段时间的Micros ...
- 图像滤镜艺术---挤压(Pinch)滤镜
原文:图像滤镜艺术---挤压(Pinch)滤镜 Pinch滤镜 Pinch滤镜是通过坐标变换来实现以某个点(cenX,cenY)为中心,某个半径R内图像向其挤压变形的效果.实现这个滤镜的算法很多,主要 ...