天天看點

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

  }
}
           
JOptionPane如何自定義按鈕綁定事件

引用: 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