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

 

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.  
     
  12.  
    messageType 参数主要用于提供来自外观的默认图标。
  13.  
     
  14.  
     
  15.  
    参数:
  16.  
    parentComponent - 确定在其中显示对话框的 Frame;如果为 null 或者 parentComponent 不具有 Frame,则使用默认的 Frame
  17.  
    message - 要显示的 Object
  18.  
    title - 对话框的标题字符串
  19.  
    optionType - 指定可用于对话框的选项的整数:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION 或 OK_CANCEL_OPTION
  20.  
    messageType - 指定消息种类的整数,主要用于确定来自可插入外观的图标:ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或 PLAIN_MESSAGE
  21.  
    icon - 在对话框中显示的图标
  22.  
    options - 指示用户可能选择的对象组成的数组;如果对象是组件,则可以正确呈现;非 String 对象使用其 toString 方法呈现;如果此参数为 null,则由外观确定选项
  23.  
    initialValue - 表示对话框的默认选择的对象;只有在使用 options 时才有意义;可以为 null
这里网上找到的例子

 

 

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

 

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

引用: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.  
    });
  12.  
    jbutton.setEnabled(false);
  13.  
    int rc = JOptionPane.showOptionDialog(new JLabel("12322322"), "Question ?", "Confirmation",
  14.  
    JOptionPane.INFORMATION_MESSAGE, 0, null, buttons, buttons[0]);
  15.  
     
  16.  
    System.out.println(rc);
  17.  
    }
注意: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.  
     
  17.  
    System.out.println(rc);
  18.  
    }