我正在使用SplashScreen类为Java应用程序创建启动画面。问题是多监视器系统上的位置是不确定的。该文档指出“未指定多监视器系统上的位置 - 它依赖于平台和实现”。该应用程序将仅用于多监视器平台,我想确保它始终集中在其中一个屏幕上。有没有办法实现这个目标?该应用程序将仅在Linux上使用,因此该平台在任何地方都是相同的。
答案 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);
使用已接受的解决方案,我遇到的问题是框架显示在我的两个屏幕的边框上。即在两个屏幕的中心。