Java Windows 10任务栏位置
我想知道javafx项目的任务栏位置。意味着我想知道任务栏是在顶部、底部、左侧还是右侧。Java Windows 10任务栏位置,java,javafx,Java,Javafx,我想知道javafx项目的任务栏位置。意味着我想知道任务栏是在顶部、底部、左侧还是右侧。 当任务栏位置更改时,我想在代码中执行一些操作。如何做这些事情?以下方法仅使用JavaFXAPI 我用Win10和Java8更新161测试了它。它可以工作,但在任务栏被允许动态隐藏显示时不会触发(在这种情况下,它始终认为边界等于视觉边界) 由于列表的刷新是由非公共的ToolkitAPI实现的,因此它可能无法在不同的操作系统上正常工作 当屏幕的(可视)边界更改时,由更改返回的可观察列表。此事实可用于根据边界和可
当任务栏位置更改时,我想在代码中执行一些操作。如何做这些事情?以下方法仅使用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需要一个单独的问题。(被愚弄的候选人的边界太宽了。)我将很快发布这个解决方案……即使它应该