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

时间:2010-12-28 00:45:27

标签: java swing joptionpane

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

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

2 个答案:

答案 0 :(得分: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();

通过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();

答案 1 :(得分:0)

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