JOptionPane如何自定义按钮绑定事件
JOptionPane如何自定义按钮绑定事件
2018年01月29日 19:27:10
阅读数:475
摘自:https://blog.csdn.net/m0_37355951/article/details/79198713
JOptionPane是java方便快捷弹出窗口。虽然没有JDialog那么灵活,但是确实实用。切入正题如何在JOptionPane自定义按钮,这里用到如下方法。
public static int showOptionDialog(Component parentComponent,
Object message,
String title,
int optionType,
int messageType,
Icon icon,
Object[] options,
Object initialValue)
throws HeadlessException调出一个带有指定图标的对话框,其中的初始选择由 initialValue 参数确定,选项数由 optionType 参数确定。
如果 optionType 为 YES_NO_OPTION 或者 YES_NO_CANCEL_OPTION,并且 options 参数为 null,则由外观提供选项。
messageType 参数主要用于提供来自外观的默认图标。
参数:
parentComponent - 确定在其中显示对话框的 Frame;如果为 null 或者 parentComponent 不具有 Frame,则使用默认的 Frame
message - 要显示的 Object
title - 对话框的标题字符串
optionType - 指定可用于对话框的选项的整数:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION 或 OK_CANCEL_OPTION
messageType - 指定消息种类的整数,主要用于确定来自可插入外观的图标:ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或 PLAIN_MESSAGE
icon - 在对话框中显示的图标
options - 指示用户可能选择的对象组成的数组;如果对象是组件,则可以正确呈现;非 String 对象使用其 toString 方法呈现;如果此参数为 null,则由外观确定选项
initialValue - 表示对话框的默认选择的对象;只有在使用 options 时才有意义;可以为 null
这里网上找到的例子import javax.swing.JOptionPane;
public class Main {
public static void main(String[] argv) throws Exception {
String[] buttons = { "Yes", "Yes to all", "No", "Cancel" };
int rc = JOptionPane.showOptionDialog(null, "Question ?", "Confirmation",
JOptionPane.WARNING_MESSAGE, 0, null, buttons, buttons[2]);
System.out.println(rc);
}
}
总结:
1、字符串数组是可以显示成按钮,那么问题,我怎么获取这个按钮对象呢?大胆尝试一下向里面直接传入button对象是否可以?
直接传入JButton对象
public static void main(String[] args) {
JButton jbutton = new JButton( "Yes");
JButton jbuttons = new JButton( "no");
JButton[] buttons = { jbutton,jbuttons};
jbutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent paramActionEvent) {
System.out.println("您点击了YES。。。。。");
}
});
jbutton.setEnabled(false);
int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
System.out.println(rc);
}
注意:jbutton事件绑定必须在JOptionPane.showOptionDialog(...)之前,因为这个对话框会阻塞,这个方法以下不会立即执行继续修改问题:发现对话框关不掉了。是不是很尴尬?
Window win = SwingUtilities.getWindowAncestor(jbutton); //找到该组件所在窗口
win.dispose(); //关闭
整个代码如下:
public static void main(String[] args) {
final JButton jbutton = new JButton( "Yes");
JButton jbuttons = new JButton( "no");
JButton[] buttons = { jbutton,jbuttons};
jbutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent paramActionEvent) {
System.out.println("您点击了YES。。。。。");
//这里就是关闭窗口
Window win = SwingUtilities.getWindowAncestor(jbutton);
win.dispose();
}
});
int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
System.out.println(rc);
}
参考网址:
1、http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizeJOptionPanebuttons.htm
2、https://stackoverflow.com/questions/29357055/close-window-jpanel-in-java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2016-07-18 awk(流程控制、内置变量、内置函数、数组)