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

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

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

静态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(); 

通过JOptionPane构造函数和JOptionPane集合方法的参数组合,您可以执行使用静态方法所做的任何事情,并且可以访问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(); 

JOptionPane将使用给定的parentComponent (第一个方法参数)来确定对话框的居中位置(例如,在javax.swing.JOptionPane.showMessageDialog(Component,Object)中)

你可以尝试传入一个伪造的组件,将对话框定位到另一个位置,例如:

  JFrame frame = new JFrame("Test"); frame.setLocation(100, 100); frame.setSize(500, 500); frame.setVisible(true); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 'Invisible' fake component for positioning JWindow c = new JWindow(); c.setSize(0, 0); c.setVisible(true); Point location = frame.getLocation(); location.translate(200, 100); c.setLocation(location); JOptionPane.showInputDialog(c,"Foo");