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

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);

  }
}


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

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

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JOptionPane类提供了许多静态方法,可以显示不同类型的对话框,例如消息框、警告框、确认框等。其中,确认框通常需要自定义按钮,可以使用JOptionPane.showOptionDialog()方法来实现。 下面是一个示例代码,演示如何自定义确认框的按钮: ```java import javax.swing.JOptionPane; import javax.swing.UIManager; public class CustomOptionDialogExample { public static void main(String[] args) { String[] options = {"Yes", "No"}; try { // 设置对话框的外观 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } int result = JOptionPane.showOptionDialog( null, // 父组件 "Do you want to continue?", // 消息内容 "Confirmation", // 标题 JOptionPane.YES_NO_OPTION, // 选项类型 JOptionPane.QUESTION_MESSAGE, // 消息类型 null, // 图标 options, // 自定义按钮 options[0] // 默认选中的按钮 ); if (result == JOptionPane.YES_OPTION) { System.out.println("You clicked Yes"); } else if (result == JOptionPane.NO_OPTION) { System.out.println("You clicked No"); } else { System.out.println("You closed the dialog"); } } } ``` 在上面的示例中,我们定义了一个选项数组,其中包含两个字符串“Yes”和“No”。然后,我们使用JOptionPane.showOptionDialog()方法创建一个确认框,其中指定了自定义按钮数组、默认选中的按钮等参数。最后,根据用户的选择,输出相应的消息。 需要注意的是,在显示对话框前,我们先使用UIManager.setLookAndFeel()方法设置了对话框的外观,以使其更符合当前操作系统的风格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值