如何确保在特定监视器上打开JOptionPane?

时间:2015-02-12 13:12:21

标签: java swing joptionpane

使用启动了许多后台进程的Java应用程序。
如果出现问题,JOptionPane会弹出一些常规信息。
工作站有多个显示器,JOptionPane可能会出现 他们中的任何一个。
没有关联的窗口可用作JOptionPane的“父级”。
有没有办法指定JOptionPane应该出现在哪个监视器上?

1 个答案:

答案 0 :(得分:2)

如果通过实例化直接使用JOptionPane,则可以指定对话框的显示位置。例如:

JOptionPane pane = new JOptionPane("Hi!");
JDialog dialog = pane.createDialog("Look at me");
dialog.setVisible(true);

在示例中,在致电dialog.setVisible()之前,您可以定位对话框,例如:

dialog.setBounds(100, 100, 100, 100);

要在显示器上显示非默认对话框,您必须获取所需显示的边界(Rectangle),并且可以将对话框放置在该区域内。

以下是如何获取显示列表(及其界限)的方法。代码取自GraphicsConfiguration的Javadoc:

Rectangle virtualBounds = new Rectangle();
GraphicsEnvironment ge = GraphicsEnvironment.
        getLocalGraphicsEnvironment();
GraphicsDevice[] gs =
        ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
    GraphicsDevice gd = gs[j];
    GraphicsConfiguration[] gc =
        gd.getConfigurations();
    for (int i=0; i < gc.length; i++) {
        virtualBounds =
            virtualBounds.union(gc[i].getBounds());
    }
}