gpt4 book ai didi

JAVAFX,当任务栏的位置发生变化时,如何在屏幕上更新最大化未修饰窗口的宽度和高度?

转载 作者:行者123 更新时间:2023-12-05 04:24:15 26 4
gpt4 key购买 nike

我正在尝试做的是... enter image description here 1

我正在尝试为我的 Undecorated-window 添加功能,使其在最大化和任务栏的位置发生变化时自动调整大小。

通过使用 onMouseMove 通过 getVisualBounds() 检测屏幕尺寸变化并检查它,我已经接近了。 onMouseMove() 的一个问题是它仅在鼠标移过窗口时调整大小,而不是在更改任务栏后调整大小。

这是我想出的演示代码。

/////// controller Class////////
private Stage stage;
boolean lock = false;
ObservableList<Screen> screenSizes;

public void setUp(Stage stage){
this.stage = stage;
screenSizes = Screen.getScreensForRectangle(new Rectangle2D(this.stage.getX(), this.stage.getY(), this.stage.getWidth(), this.stage.getHeight()));
}


@FXML
protected void onMaximizedButton() {
if(lock == true){
stage.setMaximized(false);
lock = false;
}else{
stage.setMaximized(true);
lock = true;
stage.setX(screenSizes.get(0).getVisualBounds().getMinX());
stage.setY(screenSizes.get(0).getVisualBounds().getMinY());
stage.setWidth(screenSizes.get(0).getVisualBounds().getWidth());
stage.setHeight(screenSizes.get(0).getVisualBounds().getHeight());
}


}

@FXML
private void onMouseMove(){
ObservableList<Screen> newScreenSizes = Screen.getScreensForRectangle(new Rectangle2D(stage.getX(), stage.getY(), stage.getWidth(),stage.getHeight()));
if(!(newScreenSizes.get(0).getVisualBounds().equals(screenSizes.get(0).getVisualBounds()))){
if(lock == true){
//stage.setMaximized(true);
screenSizes = newScreenSizes;
stage.setX(screenSizes.get(0).getVisualBounds().getMinX());
stage.setY(screenSizes.get(0).getVisualBounds().getMinY());
stage.setWidth(screenSizes.get(0).getVisualBounds().getWidth());
stage.setHeight(screenSizes.get(0).getVisualBounds().getHeight());

}

}

}
///// main class////////
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Parent root = fxmlLoader.load();
HelloController helloController = fxmlLoader.getController();

Scene scene = new Scene(root, 320, 240);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.initStyle(StageStyle.UNDECORATED);
stage.show();
helloController.setUp(stage);


}

public static void main(String[] args) {
launch();
}

我在问是否有办法获取任务栏的位置并在更改时更新它?

我想过但没有做的其他事情,也许使用 Observable 屏幕列表并向其添加一个监听器并以某种方式将其绑定(bind)到某些东西以使其在任务栏更改时自动更改?

最佳答案

这可能不是一个正确的解决方案,但如果您准备好冒险使用 com.sun.* 类,您可以采用以下方法。

import com.sun.glass.ui.Screen;

@Override
public void start(final Stage stage) throws Exception {
// Your code....

Screen.setEventHandler(new Screen.EventHandler() {

@Override
public void handleSettingsChanged() {
System.out.println("Resize the window here......");
}
});
}

关于JAVAFX,当任务栏的位置发生变化时,如何在屏幕上更新最大化未修饰窗口的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73547171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com