多显示器上的中心Java启动画面

时间:2009-12-28 10:41:31

标签: java position splash-screen multiple-monitors

我正在使用SplashScreen类为Java应用程序创建启动画面。问题是多监视器系统上的位置是不确定的。该文档指出“未指定多监视器系统上的位置 - 它依赖于平台和实现”。该应用程序将仅用于多监视器平台,我想确保它始终集中在其中一个屏幕上。有没有办法实现这个目标?该应用程序将仅在Linux上使用,因此该平台在任何地方都是相同的。

5 个答案:

答案 0 :(得分:5)

有一个示例Javafx相当于Splash屏幕。然而,这个启动画面基本上是一个java swing applet,它从javafx调用以显示给用户,并使用进度条和加载内容的标题模拟或多或少的eclipse和netbeans启动画面。

以下是链接 http://0divides0.wordpress.com/2011/03/17/splash-screen-with-javafx/

您必须能够获取代码并分离用java swing编写的启动画面代码并自行使用。

这是一个自定义的java swing启动画面。 因此,它使用传统功能

将闪屏放在中心位置
 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 Dimension labelSize = l.getPreferredSize();
 setLocation(screenSize.width / 2 - (labelSize.width / 2), screenSize.height / 2 - (labelSize.height / 2));

答案 1 :(得分:1)

然后不要使用Java 6中的内置启动画面。使用UI工具包创建自己的启动画面,并通过计算窗口的大小和可用屏幕的大小来手动定位窗口。

答案 2 :(得分:0)

另一个示例代码:

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

答案 3 :(得分:0)

它可能不是在Java的上下文中定义的,但它肯定是在显示服务器的上下文中定义的。

对于Linux / X11,重要的方面是XInerama是否启用。此X扩展使应用程序能够了解构成桌面的物理显示。

验证启用XInerama的快速方法是尝试最大化多监视器目标系统上的窗口。启用XInerama后,它应该最大化到活动监视器的尺寸,而不是整个屏幕表面。

当启动XInerama时,启动屏幕将在应用程序启动时以活动监视器为中心。

如果您只专注于正确定位应用程序的启动画面,您将很快获得有关其他多监视器问题的反馈,例如跨所有屏幕或窗口的任务栏,可在所有屏幕上最大化。

答案 4 :(得分:0)

在屏幕上居中框架的不同解决方案:

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

使用已接受的解决方案,我遇到的问题是框架显示在我的两个屏幕的边框上。即在两个屏幕的中心。