zoukankan      html  css  js  c++  java
  • JOptionPane如何自定义按钮绑定事件

    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

  • 相关阅读:
    简化日常工作之三:自己写一个CI脚手架
    gearman的安装和配置
    简化日常工作系列之二 ----- 定时采集小说
    简化日常工作系列之一 ---- 自动新建每日记录
    代码简洁之四 统一抽象层次
    php处理金额显示的一些笔记
    代码简洁之三:减少注释 增加代码可读性
    通用性安装redis和基本配置
    写一个Redis封装类
    Exchange2010安装指南
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/9332213.html
Copyright © 2011-2022 走看看