JOptionPane如何自定义按钮绑定事件

2018年01月29日 19:27:10
阅读数:475

摘自:https://blog.csdn.net/m0_37355951/article/details/79198713

JOptionPane是java方便快捷弹出窗口。虽然没有JDialog那么灵活,但是确实实用。切入正题如何在JOptionPane自定义按钮,这里用到如下方法。

    1. public static int showOptionDialog(Component parentComponent,
      1. Object message,
        1. String title,
          1. int optionType,
            1. int messageType,
              1. Icon icon,
                1. Object[] options,
                  1. Object initialValue)
                    1. throws HeadlessException调出一个带有指定图标的对话框,其中的初始选择由 initialValue 参数确定,选项数由 optionType 参数确定。
                      1. 如果 optionType YES_NO_OPTION 或者 YES_NO_CANCEL_OPTION,并且 options 参数为 null,则由外观提供选项。
                          1. messageType 参数主要用于提供来自外观的默认图标。
                                1. 参数:
                                  1. parentComponent - 确定在其中显示对话框的 Frame;如果为 null 或者 parentComponent 不具有 Frame,则使用默认的 Frame
                                    1. message - 要显示的 Object
                                      1. title - 对话框的标题字符串
                                        1. optionType - 指定可用于对话框的选项的整数:DEFAULT_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTION OK_CANCEL_OPTION
                                          1. messageType - 指定消息种类的整数,主要用于确定来自可插入外观的图标:ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGE PLAIN_MESSAGE
                                            1. icon - 在对话框中显示的图标
                                              1. options - 指示用户可能选择的对象组成的数组;如果对象是组件,则可以正确呈现;非 String 对象使用其 toString 方法呈现;如果此参数为 null,则由外观确定选项
                                                1. initialValue - 表示对话框的默认选择的对象;只有在使用 options 时才有意义;可以为 null

                                              这里网上找到的例子

                                                1. import javax.swing.JOptionPane;
                                                    1. public class Main {
                                                      1. public static void main(String[] argv) throws Exception {
                                                          1. String[] buttons = { "Yes", "Yes to all", "No", "Cancel" };
                                                              1. int rc = JOptionPane.showOptionDialog(null, "Question ?", "Confirmation",
                                                                1. JOptionPane.WARNING_MESSAGE, 0, null, buttons, buttons[2]);
                                                                    1. System.out.println(rc);
                                                                        1. }
                                                                          1. }

                                                                        引用:http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizeJOptionPanebuttons.htm
                                                                        总结:

                                                                        1、字符串数组是可以显示成按钮,那么问题,我怎么获取这个按钮对象呢?大胆尝试一下向里面直接传入button对象是否可以?

                                                                        直接传入JButton对象

                                                                          1. public static void main(String[] args) {
                                                                            1. JButton jbutton = new JButton( "Yes");
                                                                              1. JButton jbuttons = new JButton( "no");
                                                                                1. JButton[] buttons = { jbutton,jbuttons};
                                                                                  1. jbutton.addActionListener(new ActionListener() {
                                                                                    1. @Override
                                                                                      1. public void actionPerformed(ActionEvent paramActionEvent) {
                                                                                        1. System.out.println("您点击了YES。。。。。");
                                                                                            1. }
                                                                                              1. });
                                                                                                1. jbutton.setEnabled(false);
                                                                                                  1. int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
                                                                                                    1. JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
                                                                                                        1. System.out.println(rc);
                                                                                                          1. }

                                                                                                        注意:jbutton事件绑定必须在JOptionPane.showOptionDialog(...)之前,因为这个对话框会阻塞,这个方法以下不会立即执行
                                                                                                        继续修改问题:发现对话框关不掉了。是不是很尴尬?

                                                                                                          1. Window win = SwingUtilities.getWindowAncestor(jbutton); //找到该组件所在窗口
                                                                                                            1. win.dispose(); //关闭

                                                                                                          整个代码如下:

                                                                                                            1. public static void main(String[] args) {
                                                                                                              1. final JButton jbutton = new JButton( "Yes");
                                                                                                                1. JButton jbuttons = new JButton( "no");
                                                                                                                  1. JButton[] buttons = { jbutton,jbuttons};
                                                                                                                    1. jbutton.addActionListener(new ActionListener() {
                                                                                                                      1. @Override
                                                                                                                        1. public void actionPerformed(ActionEvent paramActionEvent) {
                                                                                                                          1. System.out.println("您点击了YES。。。。。");
                                                                                                                            1. //这里就是关闭窗口
                                                                                                                              1. Window win = SwingUtilities.getWindowAncestor(jbutton);
                                                                                                                                1. win.dispose();
                                                                                                                                  1. }
                                                                                                                                    1. });
                                                                                                                                      1. int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
                                                                                                                                        1. JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
                                                                                                                                            1. System.out.println(rc);
                                                                                                                                              1. }

                                                                                                                                            参考网址:

                                                                                                                                            1、http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizeJOptionPanebuttons.htm

                                                                                                                                            2、https://stackoverflow.com/questions/29357055/close-window-jpanel-in-java

                                                                                                                                            JOptionPane如何自定义按钮绑定事件的更多相关文章

                                                                                                                                            1. 在VS2005中设置WPF中自定义按钮的事件

                                                                                                                                              原文:在VS2005中设置WPF中自定义按钮的事件 上篇讲了如何在Blend中绘制圆角矩形(http://blog.csdn.net/johnsuna/archive/2007/08/13/17407 ...

                                                                                                                                            2. 给bootstrap-sweetalert弹框的按钮绑定事件

                                                                                                                                              一. sweetalert cdn使用 sweetalert提供了很多的炫酷弹框,有很多的用法.关于本地导入使用sweetalert的方法,在之前的博客里提到过(点击前往),不过我们也可以使用cdn. ...

                                                                                                                                            3. 一百、SAP中ALV事件之十三,给ALV的自定义按钮添加事件

                                                                                                                                              一.我们查看定义的按钮,有一个名字是ZADD的自定义按钮 二.代码如下,用于判断点击了哪个按钮 三.点击测试按钮之后,会弹出一个弹窗 完美

                                                                                                                                            4. 常用代码之三:jQuery为按钮绑定事件的代码

                                                                                                                                              如题,比如有一个按钮:<input type='button' class='btn-text' id ='addHtml' value='新增' /> 为它添加onclick事件的代码: ...

                                                                                                                                            5. jquery给按钮绑定事件

                                                                                                                                              JQuery: $(function(){ $("#btn1").bind("click",function(){ $("#div1").s ...

                                                                                                                                            6. wxpython程序基本功能源码整理,包括基本文字,输入框,字体设置,按钮绑定事件触发

                                                                                                                                              #coding=utf-8 import wx class MyApp(wx.App): def __init__(self): wx.App.__init__(self) def OnInit(se ...

                                                                                                                                            7. Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

                                                                                                                                              Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...

                                                                                                                                            8. Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示

                                                                                                                                              相关类手册: http://www.yiichina.com/api/CButtonColumn   buttons 属性 public array $buttons; the configurati ...

                                                                                                                                            9. Android_安卓为按钮控件绑定事件的五种方式

                                                                                                                                              一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...

                                                                                                                                            随机推荐

                                                                                                                                            1. L110 promise

                                                                                                                                              We assure you that such things will not happen again in our future deliveries. We'd like to avail ou ...

                                                                                                                                            2. uva12563 Jin Ge Jin Qu hao(01背包)

                                                                                                                                              这是一道不错的题.首先通过分析,贪心法不可取,可以转化为01背包问题.但是这过程中还要注意,本题中的01背包问题要求背包必须装满!这就需要在普通的01背包问题上改动两处,一个是初始化的问题:把dp[0 ...

                                                                                                                                            3. C语言编译全过程

                                                                                                                                              编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序.    ...

                                                                                                                                            4. BZOJ5334: [Tjoi2018]数学计算

                                                                                                                                              BZOJ5334: [Tjoi2018]数学计算 https://lydsy.com/JudgeOnline/problem.php?id=5334 分析: 线段树按时间分治即可. 代码: #incl ...

                                                                                                                                            5. C# partial 说明(转)

                                                                                                                                              http://www.cnblogs.com/Echo_saq/archive/2012/11/19/2777058.html 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许 ...

                                                                                                                                            6. 正确安全清空在线慢查询日志slow log的流程 (转)

                                                                                                                                              1, see the slow log status; mysql> show variables like '%slow%'; +---------------------+--------- ...

                                                                                                                                            7. QString乱谈(2)

                                                                                                                                              长期以来,很多人都清楚,一旦C++源码中直接使用了中文,这样的源码想要跨平台(I18N)会非常困难. 随着: Windows下:MSVC2010成为主流 Linux下:GCC升级到4.6 C++中的中 ...

                                                                                                                                            8. spring事务 异常回滚

                                                                                                                                              spring事务回滚 可抛出自定义继承自RuntimeException

                                                                                                                                            9. Oracle redo 日志损坏的几种情况下的恢复

                                                                                                                                              Oracle redo 日志损坏的几种情况下的恢复 第一:损坏的redo为非正在使用的redo log 1.归档模式,不是当前正在日志损坏,数据库打开模式. 模拟损坏:SQL> select * ...

                                                                                                                                            10. java中try{}catch{}和finally{}的执行顺序问题

                                                                                                                                               今天我给大家讲解一下java的的错误和异常处理机制以及相关异常的执行顺序问题.如有不足的地方,欢迎批评指正~ 1.首相简单介绍一下java中的错误(Error)和异常(Exception) 错误和异 ...