JOptionPane如何自定義按鈕綁定事件
2018年01月29日 19:27:10
閱讀數:475
摘自:https://blog.csdn.net/m0_37355951/article/details/79198713
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);
-
-
}
-
}
總結:
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