Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Windows 10任务栏位置_Java_Javafx - Fatal编程技术网

Java Windows 10任务栏位置

Java Windows 10任务栏位置,java,javafx,Java,Javafx,我想知道javafx项目的任务栏位置。意味着我想知道任务栏是在顶部、底部、左侧还是右侧。 当任务栏位置更改时,我想在代码中执行一些操作。如何做这些事情?以下方法仅使用JavaFXAPI 我用Win10和Java8更新161测试了它。它可以工作,但在任务栏被允许动态隐藏显示时不会触发(在这种情况下,它始终认为边界等于视觉边界) 由于列表的刷新是由非公共的ToolkitAPI实现的,因此它可能无法在不同的操作系统上正常工作 当屏幕的(可视)边界更改时,由更改返回的可观察列表。此事实可用于根据边界和可

我想知道javafx项目的任务栏位置。意味着我想知道任务栏是在顶部、底部、左侧还是右侧。
当任务栏位置更改时,我想在代码中执行一些操作。如何做这些事情?

以下方法仅使用JavaFXAPI

我用Win10和Java8更新161测试了它。它可以工作,但在任务栏被允许动态隐藏显示时不会触发(在这种情况下,它始终认为边界等于视觉边界)

由于列表的刷新是由非公共的
Toolkit
API实现的,因此它可能无法在不同的操作系统上正常工作

屏幕
的(可视)边界更改时,由更改返回的
可观察列表
。此事实可用于根据
边界
可视化边界
之间的差异确定主屏幕中任务栏的侧面:

InvalidationListener listener = new InvalidationListener() {

    private Side currentSide = null;

    public void invalidated(Observable o) {
        Screen primary = Screen.getPrimary();
        Rectangle2D bounds = primary.getBounds();
        Rectangle2D visualBounds = primary.getVisualBounds();
        Side side = null;

        // determine side of task bar, if size differs
        if (bounds.getWidth() > visualBounds.getWidth()) {
            if (bounds.getMinX() < visualBounds.getMinX()) {
                side = Side.LEFT;
            } else if (bounds.getMaxX() > visualBounds.getMaxX()) {
                side = Side.RIGHT;
            }
        } else if (bounds.getHeight() > visualBounds.getHeight()) {
            if (bounds.getMinY() < visualBounds.getMinY()) {
                side = Side.TOP;
            } else if (bounds.getMaxY() > visualBounds.getMaxY()) {
                side = Side.BOTTOM;
            }
        }

        // only notify once per change independent of size of task bar
        if (side != currentSide) {
            currentSide = side;
            System.out.println(side == null
                    ? "Side of task bar unknown/task bar not displayed"
                    : "The task bar is now displayed in the " + side);
        }
    }
};
Screen.getScreens().addListener(listener);
listener.invalidated(null);
invalizationListener=新的invalizationListener(){
私有端currentSide=null;
公共无效(可观察o){
Screen primary=Screen.getPrimary();
矩形2D边界=primary.getBounds();
矩形2D visualBounds=primary.getVisualBounds();
Side=null;
//如果大小不同,请确定任务栏的侧面
if(bounds.getWidth()>visualBounds.getWidth()){
if(bounds.getMinX()visualBounds.getMaxX()){
side=side.RIGHT;
}
}else if(bounds.getHeight()>visualBounds.getHeight()){
if(bounds.getMinY()visualBounds.getMaxY()){
侧面=侧面。底部;
}
}
//每次更改仅通知一次,与任务栏的大小无关
如果(侧!=当前侧){
currentSide=侧;
System.out.println(side==null
?“任务栏的一侧未知/未显示任务栏”
:“任务栏现在显示在“+侧);
}
}
};
Screen.getScreens().addListener(listener);
listener.invalidated(null);

以下方法仅使用JavaFXAPI

我用Win10和Java8更新161测试了它。它可以工作,但在任务栏被允许动态隐藏显示时不会触发(在这种情况下,它始终认为边界等于视觉边界)

由于列表的刷新是由非公共的
Toolkit
API实现的,因此它可能无法在不同的操作系统上正常工作

屏幕
的(可视)边界更改时,由更改返回的
可观察列表
。此事实可用于根据
边界
可视化边界
之间的差异确定主屏幕中任务栏的侧面:

InvalidationListener listener = new InvalidationListener() {

    private Side currentSide = null;

    public void invalidated(Observable o) {
        Screen primary = Screen.getPrimary();
        Rectangle2D bounds = primary.getBounds();
        Rectangle2D visualBounds = primary.getVisualBounds();
        Side side = null;

        // determine side of task bar, if size differs
        if (bounds.getWidth() > visualBounds.getWidth()) {
            if (bounds.getMinX() < visualBounds.getMinX()) {
                side = Side.LEFT;
            } else if (bounds.getMaxX() > visualBounds.getMaxX()) {
                side = Side.RIGHT;
            }
        } else if (bounds.getHeight() > visualBounds.getHeight()) {
            if (bounds.getMinY() < visualBounds.getMinY()) {
                side = Side.TOP;
            } else if (bounds.getMaxY() > visualBounds.getMaxY()) {
                side = Side.BOTTOM;
            }
        }

        // only notify once per change independent of size of task bar
        if (side != currentSide) {
            currentSide = side;
            System.out.println(side == null
                    ? "Side of task bar unknown/task bar not displayed"
                    : "The task bar is now displayed in the " + side);
        }
    }
};
Screen.getScreens().addListener(listener);
listener.invalidated(null);
invalizationListener=新的invalizationListener(){
私有端currentSide=null;
公共无效(可观察o){
Screen primary=Screen.getPrimary();
矩形2D边界=primary.getBounds();
矩形2D visualBounds=primary.getVisualBounds();
Side=null;
//如果大小不同,请确定任务栏的侧面
if(bounds.getWidth()>visualBounds.getWidth()){
if(bounds.getMinX()visualBounds.getMaxX()){
side=side.RIGHT;
}
}else if(bounds.getHeight()>visualBounds.getHeight()){
if(bounds.getMinY()visualBounds.getMaxY()){
侧面=侧面。底部;
}
}
//每次更改仅通知一次,与任务栏的大小无关
如果(侧!=当前侧){
currentSide=侧;
System.out.println(side==null
?“任务栏的一侧未知/未显示任务栏”
:“任务栏现在显示在“+侧);
}
}
};
Screen.getScreens().addListener(listener);
listener.invalidated(null);

您可以使用
java.awt.Toolkit
获取给定屏幕设备的屏幕插图

对于主屏幕:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreenDevice = ge.getDefaultScreenDevice();
GraphicsConfiguration defaultConfiguration = defaultScreenDevice.getDefaultConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(defaultConfiguration);
我的主屏幕的插图(使用Windows 10):

java.awt.Insets[top=0,left=0,bottom=40,right=0]


因此,任务栏的高度为40像素,位于屏幕底部。

您可以使用
java.awt.Toolkit
获取给定屏幕设备的屏幕插图

对于主屏幕:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreenDevice = ge.getDefaultScreenDevice();
GraphicsConfiguration defaultConfiguration = defaultScreenDevice.getDefaultConfiguration();
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(defaultConfiguration);
我的主屏幕的插图(使用Windows 10):

java.awt.Insets[top=0,left=0,bottom=40,right=0]


因此,任务栏的高度为40像素,位于屏幕底部。

我认为您必须向我们提供有关所需内容的更多信息。我是说,你是说操作系统中的任务栏吗?当任务栏的位置改变时,你想做什么?我不同意把这个问题作为这个问题的重复来结束:因为javafxapi有一个独特的解决方案,imho需要一个单独的问题。(被骗候选人的范围太广了。)我很快会发布这个解决方案……我认为你必须向我们提供更多关于你想要什么的信息。我是说,你是说操作系统中的任务栏吗?当任务栏的位置改变时,你想做什么?我不同意把这个问题作为这个问题的重复来结束:因为javafxapi有一个独特的解决方案,imho需要一个单独的问题。(被愚弄的候选人的边界太宽了。)我将很快发布这个解决方案……即使它应该