获取对JOptionPane静态方法创建的对象的引用

sky*_*ork 5 java swing joptionpane

我想知道是否有可能获得对JOptionPane的静态方法之一(例如showMessageDialog)创建的(JDialog?)对象的引用?我打算修改对话框出现在屏幕上的位置.更具体地说,我希望对话框显示在主应用程序窗口的左上角,而不是默认情况下窗口的中心.因此,对该对象的引用将使我能够使用setLocation来实现所需的效果......

任何建议将不胜感激!谢谢!

rob*_*x44 7

静态showXXXDialog()方法只是为了方便.如果你查看源代码JOptionPane,你会发现实际上,一个JOptionPane对象是根据你指定的选项创建的,然后JOptionPane.createDialog(...)被调用.在不同位置显示消息对话框的一种方法是:

JOptionPane pane = new JOptionPane("Message", JOptionPane.WARNING_MESSAGE,
        JOptionPane.DEFAULT_OPTION);
JDialog dialog = pane.createDialog("TITLE");
dialog.setLocation(0, 0);
dialog.setVisible(true);

// dialog box shown here

dialog.dispose();
Object selection = pane.getValue();
Run Code Online (Sandbox Code Playgroud)

通过JOptionPane构造函数和JOptionPaneset方法的参数组合,您可以执行使用静态方法所做的任何操作,并且可以访问JDialog对象本身.

编辑 :(添加OP的输入对话框示例)

JOptionPane pane = new JOptionPane("Message", JOptionPane.QUESTION_MESSAGE,
        JOptionPane.OK_CANCEL_OPTION, null, null, null);
pane.setWantsInput(true);
JDialog dialog = pane.createDialog(null, "Title");
dialog.setLocation(0, 0);
dialog.setVisible(true);

String str = (String) pane.getInputValue();
Run Code Online (Sandbox Code Playgroud)