Java Mac OS X - 以编程方式计算没有Dock高度的屏幕高度

时间:2015-11-21 15:04:02

标签: java macos user-interface javafx screen-size

我需要这个让应用程序以完整的高度打开(没有全屏),但是大小应该是精确的没有底座(设置javafx.scene.Scene的大小这么大会在标题中产生一些问题双击行为)。

我尝试使用此代码:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return new Dimension(screenSize.width, screenSize.height);

它可以工作,但它认为Dock是屏幕的一部分。 有没有办法以编程方式计算没有Dock高度的屏幕高度,或者至少计算Dock的大小?

我也测试了这个解决方案,但奇怪的双击行为仍然存在:

import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("title");
        Rectangle bounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
        Group root = new Group();
        Scene scene = new Scene(root, bounds.getWidth(), bounds.getHeight(), Color.WHITE);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

1 个答案:

答案 0 :(得分:1)

对于AWT和Swing,您可以使用类GraphicsEnvironment获取窗口的相应大小。虽然计算机可能有许多图形环境,但您可以通过调用静态方法getMaximumWindowBounds()来访问屏幕。

然后你可以使用Toolkit.getScreenSize。这为您提供了限制窗口的边界,包括顶部,左侧,底部和右侧。请注意,这不仅仅是宽度和高度的问题:Dock可以位于左侧或右侧。它还需要考虑菜单栏,java.awt.Rectangle bounds = GraphicsEnvironment .getLocalGraphicsEnvironment() .getMaximumWindowBounds(); 没有。因此,请注意正确设置窗口的原点。

javafx.geometry.Rectangle2D bounds = Screen.getPrimary().getVisualBounds();

对于JavaFX,您可以使用Screen类。在这种情况下,您使用:

Rectangle2D

返回的maxX包含maxYwidth,它们是整个屏幕的宽度和高度,heightrabbit:listener-container就是你的需要 - 消除了停靠栏和菜单栏的值。