Java 如何确保JOptionPane在特定监视器上打开?
使用启动许多后台进程的Java应用程序。Java 如何确保JOptionPane在特定监视器上打开?,java,swing,joptionpane,Java,Swing,Joptionpane,使用启动许多后台进程的Java应用程序。 如果出现问题,JOptionPane会弹出一些一般信息。 工作站有多个监视器,可能会出现JOptionPane 他们中的任何一个。 没有关联的窗口可用作JOptionPane的“父窗口”。 有没有办法指定JOptionPane应该出现在哪个监视器上?如果直接使用JOptionPane可以通过实例化对话框来指定对话框将出现的位置。例如: JOptionPane pane = new JOptionPane("Hi!"); JDialog dialo
如果出现问题,
JOptionPane
会弹出一些一般信息。
工作站有多个监视器,可能会出现
JOptionPane
他们中的任何一个。
没有关联的窗口可用作
JOptionPane
的“父窗口”。
有没有办法指定
JOptionPane
应该出现在哪个监视器上?如果直接使用JOptionPane
可以通过实例化对话框来指定对话框将出现的位置。例如:
JOptionPane pane = new JOptionPane("Hi!");
JDialog dialog = pane.createDialog("Look at me");
dialog.setVisible(true);
在本例中,在调用dialog.setVisible()
之前,可以定位对话框,例如:
dialog.setBounds(100, 100, 100, 100);
要在非默认的显示器上显示对话框,必须获得所需显示器的边界(),并且可以将对话框定位在该区域内
下面是如何获得显示列表(及其边界)。代码取自的Javadoc):
Rectangle virtualBounds=new Rectangle();
GraphicsEnvironment ge=GraphicsEnvironment。
getLocalGraphicsEnvironment();
图形设备[]gs=
ge.getScreenDevices();
对于(int j=0;j
如果您有4个大小相同的监视器,则看起来仍然是一个bug(父屏幕不在第二个屏幕上,没有父屏幕),这是不是会在数组中产生具有相同边界的4个元素,或者所有4个窗口都计算为一个具有4个段的大窗口,每个段都是整体大小的子集?@user3601445显示的边界不是基于(0;0)的,它们是绝对的,不重叠。例如,你的默认显示应该有(x=0,y=0),如果你在左边有第二个显示,它应该有一个负的x,比如x=-1024。但是你为什么不试试呢?运行代码并打印virtualBounds
矩形。
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());
}
}