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