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,
  2. Object message,
  3. String title,
  4. int optionType,
  5. int messageType,
  6. Icon icon,
  7. Object[] options,
  8. Object initialValue)
  9. throws HeadlessException调出一个带有指定图标的对话框,其中的初始选择由 initialValue 参数确定,选项数由 optionType 参数确定。
  10. 如果 optionType 为 YES_NO_OPTION 或者 YES_NO_CANCEL_OPTION,并且 options 参数为 null,则由外观提供选项。
  11. messageType 参数主要用于提供来自外观的默认图标。
  12. 参数:
  13. parentComponent - 确定在其中显示对话框的 Frame;如果为 null 或者 parentComponent 不具有 Frame,则使用默认的 Frame
  14. message - 要显示的 Object
  15. title - 对话框的标题字符串
  16. optionType - 指定可用于对话框的选项的整数:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION 或 OK_CANCEL_OPTION
  17. messageType - 指定消息种类的整数,主要用于确定来自可插入外观的图标:ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或 PLAIN_MESSAGE
  18. icon - 在对话框中显示的图标
  19. options - 指示用户可能选择的对象组成的数组;如果对象是组件,则可以正确呈现;非 String 对象使用其 toString 方法呈现;如果此参数为 null,则由外观确定选项
  20. initialValue - 表示对话框的默认选择的对象;只有在使用 options 时才有意义;可以为 null

这里网上找到的例子


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

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

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

直接传入JButton对象


  1. public static void main(String[] args) {
  2. JButton jbutton = new JButton( "Yes");
  3. JButton jbuttons = new JButton( "no");
  4. JButton[] buttons = { jbutton,jbuttons};
  5. jbutton.addActionListener(new ActionListener() {
  6. @Override
  7. public void actionPerformed(ActionEvent paramActionEvent) {
  8. System.out.println("您点击了YES。。。。。");
  9. }
  10. });
  11. jbutton.setEnabled(false);
  12. int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
  13. JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
  14. System.out.println(rc);
  15. }

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


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

整个代码如下:


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

参考网址:

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. hdu-2544-最短路(dijkstra算法模板)

    题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...

  2. 使用手势对UIImageView进行缩放、旋转和移动(转)

    原文地址:http://blog.csdn.net/crazy_frog/article/details/8664108 // 添加所有的手势 - (void) addGestureRecognize ...

  3. Redis 高可用及分片集群,说了你也不懂

    Redis 简介 Memcached: 优点:高性能读写.单一数据类型.支持客户端式分布式集群.一致性hash 多核结构.多线程读写性能高. 缺点:无持久化.节点故障可能出现缓存穿透.分布式需要客户端 ...

  4. Java进阶知识点3:更优雅地关闭资源 - try-with-resource及其异常抑制

    一.背景 我们知道,在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制, ...

  5. linux 下安装rar解压

    在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本,操作如下 wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz t ...

  6. 如果两个人,两台电脑同时登录同一个帐号,同时对同一个账单提交,账单同时被服务器处理,那服务器应该先处理谁的,或者怎么规避这个问题。 非单点登录,重定向,stoken拦截器的问题

    方法一:给用户设置个状态 服务器端坐标记,比如数据库中增加一列,标识是否登陆,登录时先判断这个就行了,不过要考虑非正常退出的情况 http 方法二:在用户表里面 多加一个状态字段,登录成功 改变状态  ...

  7. Python函数-abs()

    说明: 返回绝对值 参数可以是:负数.正数.浮点数或者长整形 实例: abs(-1.2) #返回 1.2 abs(1.2) #返回 1.2 abs(-11216.5) #返回 11216.5 abs( ...

  8. js中call apply方法的使用介绍

    js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...

  9. 反射ORM 三层(for oracle)

    sql server and oracle 不同之处只在于: 1·参数@和: 2·自增和序列 3·oracle使用了存储过程以获得当前插入数据的ID DAL层的ORM using Oracle.Dat ...

  10. C语言第二次实验作业

    PTA ================= 11-6 方阵循环右移 --------------- 本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0.1.....n-1列变换 ...