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