我正在使用SplashScreen类为Java应用程序创建启动画面。问题在于,在多监视器系统上的位置是未定义的。文档中指出,“多监视器系统上的位置未指定 - 它取决于平台和实现”。该应用程序仅在多监视器平台上使用,并且我希望确保它始终居中于其中一个屏幕。有没有办法实现这一点?该应用程序将仅在Linux上使用,因此平台在各处都相同。
我正在使用SplashScreen类为Java应用程序创建启动画面。问题在于,在多监视器系统上的位置是未定义的。文档中指出,“多监视器系统上的位置未指定 - 它取决于平台和实现”。该应用程序仅在多监视器平台上使用,并且我希望确保它始终居中于其中一个屏幕。有没有办法实现这一点?该应用程序将仅在Linux上使用,因此平台在各处都相同。
以下是链接:http://0divides0.wordpress.com/2011/03/17/splash-screen-with-javafx/
你需要获取代码并将其中在Java Swings中编写的启动画面代码分离出来并用于自己的项目。
这是一个定制的Java Swing启动画面。因此,为了居中显示启动画面,它使用了传统功能。
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = l.getPreferredSize();
setLocation(screenSize.width / 2 - (labelSize.width / 2), screenSize.height / 2 - (labelSize.height / 2));
那就不要使用Java 6中内置的启动画面。使用您的UI工具包创建自己的启动画面,并通过计算其大小和可用屏幕的大小来手动定位窗口。
// Get the size of the screen
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
// Determine the new location of the window
int w = login.getSize().width;
int h = login.getSize().height;
int x = (dim.width-w)/2;
int y = (dim.height-h)/2;
// Move the window
setLocation(x, y);
setVisible(true);
GraphicsConfiguration c = frm.getGraphicsConfiguration();
Rectangle in = c.getBounds();
int center_x = in.x + in.width / 2;
int center_y = in.y + in.height / 2;
frm.setLocation(center_x - frm.getWidth()/2, center_y - frm.getHeight()/2);
在Java的上下文中可能没有定义,但在显示服务器的上下文中肯定有定义。
对于Linux / X11来说,重要的是XInerama是否启用。这个X扩展使应用程序能够了解组成桌面的物理显示器。
验证XInerama是否启用的一种快速方法是尝试将窗口最大化到多监视器目标系统上。如果启用了XInerama,则窗口应该只会最大化到活动监视器的尺寸,而不是整个屏幕表面。
当启用XInerama时,启动应用程序时的闪屏将居中显示在活动监视器上。
如果你只关注确保应用程序的闪屏正确定位,你很快就会得到其他多监视器问题的反馈,比如任务栏跨越所有屏幕或窗口最大化跨越所有屏幕等。