Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取对JOptionPane静态方法创建的对象的引用_Java_Swing_Joptionpane - Fatal编程技术网

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

Java 获取对JOptionPane静态方法创建的对象的引用,java,swing,joptionpane,Java,Swing,Joptionpane,我想知道是否有可能获得由JOptionPane的静态方法之一(例如showMessageDialog)创建的(JDialog?)对象的引用?我打算修改对话框在屏幕上出现的位置。更具体地说,我希望对话框出现在主应用程序窗口的左上角,而不是默认情况下的窗口中心。因此,对对象的引用将使我能够使用setLocation来实现所需的效果 任何建议都将不胜感激!谢谢 JOptionPane将使用给定的parentComponent(第一个方法参数)来确定对话框的中心位置(例如在javax.swing.JOp

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


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

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

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

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

静态
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
set方法,您可以使用静态方法执行任何操作,此外,您还可以访问
JDialog
对象本身

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


很酷,我可以看到如何将上述内容应用于showMessageDialog、showConfirmDialog等。但是如何实现showInputDialog呢?如何在JDialog中实现输入文本字段?@user548240-添加了inputDialogCool的示例,我正在考虑从头开始构建它,但不知道JOptionPane中有现成的方法。谢谢
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();