为空舞台创建可调整大小的边框 [英] Create resizable borders for empty stage

查看:126
本文介绍了为空舞台创建可调整大小的边框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个空白的 javafx.stage.Stage 没有图标最小化最大化关闭 stage.initStyle(StageStyle.UNDECORATED); 。我想自己创建它们,因为与他们一起将会使更多的按钮。因为我为 Stage 使用空样式,我需要为我的窗口设置一个可调整大小的边框。有标准的方法吗?因为创建它们作为 BorderPane 并自定义鼠标的拖动是繁琐的。

I have a blank javafx.stage.Stage with no icons minimize, maximize, and close stage.initStyle(StageStyle.UNDECORATED);. I want to create them myself, because on the line with them will make more Buttons. Because I use an empty style for the Stage, I need to set a resizable borders for my window. There are standard ways to do this? Because to create them as a BorderPane and customize the dragging of the mouse is cumbersome.

推荐答案

我使用鼠标光标位置监听器调整边框的大小,这是工作,我没有太多时间优化代码:

I make resizable borders with mouse cursor position listener, it's work, I have not much time for optimized code:

    public class Resize {
        double eY = 0;
        double eX = 0;
        double eStrtY = 0;
        double eStrtX = 0;
        double sceneStrtY = 0;
        double sceneStrtX = 0;
        double minW = 600;
        double minH = 600;
        double w = 0;
        public Resize(Stage stage, double w) {

            Scene scene = stage.getScene();
            AnchorPane root = (AnchorPane)scene.getRoot();
    this.w = w;
    root.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent e) {
            eStrtY = e.getSceneY();
            eStrtX = e.getSceneX();
            sceneStrtY = e.getSceneY();
            sceneStrtX = e.getSceneX();
        }
    });

    root.setOnMouseMoved(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
        //  double w = 8;
            double X = event.getSceneX();
            double Y = event.getSceneY();
            double sW = scene.getWidth();
            double sH = scene.getHeight();

            if(((X<w)&&(Y<w))||((X<2*w)&&(Y<w))||((Y<2*w)&&(X<w))) {
                scene.setCursor(Cursor.NW_RESIZE);
                eY = stage.getY();
                eX = stage.getX();
                root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                    @Override
                    public void handle(MouseEvent e) {
                        if(((eStrtX<w)&&(eStrtY<w))||((eStrtX<2*w)&&(eStrtY<w))||((eStrtY<2*w)&&(eStrtX<w))) {
                            if(stage.getHeight()+(eY-e.getScreenY())>minH) {
                                stage.setY(e.getScreenY());
                                stage.setHeight(stage.getHeight()+(eY-e.getScreenY()));
                                eY = e.getScreenY();
                            }
                            if(stage.getWidth()+(eX-e.getScreenX())>minW) {
                                stage.setX(e.getScreenX());
                                stage.setWidth(stage.getWidth()+(eX-e.getScreenX()));
                                eX = e.getScreenX();
                            }
                        }
                    }
                });
            }
            else
                if(((X>sW-w)&&(Y<w))||((X>sW-2*w)&&(Y<w))||((X>sW-w)&&(Y<2*w))) {
                    scene.setCursor(Cursor.NE_RESIZE);
                    eY = stage.getY();
                    eX = stage.getX() + stage.getWidth();
                    root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                        @Override
                        public void handle(MouseEvent e) {
                            if(((eStrtX>sW-w)&&(eStrtY<w))||((eStrtX>sW-2*w)&&(eStrtY<w))||((eStrtX>sW-w)&&(eStrtY<2*w))) {
                                if(stage.getHeight()+(eY-e.getScreenY())>minH) {
                                    stage.setY(e.getScreenY());
                                    stage.setHeight(stage.getHeight()+(eY-e.getScreenY()));
                                    eY = e.getScreenY();
                                }
                                if(stage.getWidth()-(eX-e.getScreenX())>minW) {
                                    stage.setWidth(stage.getWidth()-(eX-e.getScreenX()));
                                    eX = e.getScreenX();
                                }
                            }
                        }
                    });
                }
                else
                    if(((X>sW-w)&&(Y>sH-w))||((X>sW-2*w)&&(Y>sH-w))||((X>sW-w)&&(Y>sH-2*w))) {
                        scene.setCursor(Cursor.SE_RESIZE);
                        eY = stage.getY() + stage.getHeight();
                        eX = stage.getX() + stage.getWidth();
                        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                            @Override
                            public void handle(MouseEvent e) {
                                if(((eStrtX>sW-w)&&(eStrtY>sH-w))||((eStrtX>sW-2*w)&&(eStrtY>sH-w))||((eStrtX>sW-w)&&(eStrtY>sH-2*w))) {
                                    if(stage.getHeight()-(eY-e.getScreenY())>minH) {
                                        stage.setHeight(stage.getHeight()-(eY-e.getScreenY()));
                                        eY = e.getScreenY();
                                    }
                                    if(stage.getWidth()-(eX-e.getScreenX())>minW) {
                                        stage.setWidth(stage.getWidth()-(eX-e.getScreenX()));
                                        eX = e.getScreenX();
                                    }
                                }
                            }
                        });
                    }
                    else
                        if(((X<w)&&(Y>sH-w))||((X<2*w)&&(Y>sH-w))||((X<w)&&(Y>sH-2*w))) {
                            scene.setCursor(Cursor.SW_RESIZE);
                            eY = stage.getY() + stage.getHeight();
                            eX = stage.getX();
                            root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                @Override
                                public void handle(MouseEvent e) {
                                    if(((eStrtX<w)&&(eStrtY>sH-w))||((eStrtX<2*w)&&(eStrtY>sH-w))||((eStrtX<w)&&(eStrtY>sH-2*w))) {
                                        if(stage.getHeight()-(eY-e.getScreenY())>minH) {
                                            stage.setHeight(stage.getHeight()-(eY-e.getScreenY()));
                                            eY = e.getScreenY();
                                        }
                                        if(stage.getWidth()+(eX-e.getScreenX())>minW) {
                                            stage.setX(e.getScreenX());
                                            stage.setWidth(stage.getWidth()+(eX-e.getScreenX()));
                                            eX = e.getScreenX();
                                        }
                                    }
                                }
                            });
                        }
                        else
                            if(Y<w) {
                                scene.setCursor(Cursor.V_RESIZE);
                                eY = stage.getY();
                                eX = stage.getX() + stage.getWidth();
                                root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                    @Override
                                    public void handle(MouseEvent e) {
                                        if((eStrtY<w)&&(stage.getHeight()+(eY-e.getScreenY())>minH)) {
                                            stage.setY(e.getScreenY());
                                            stage.setHeight(stage.getHeight()+(eY-e.getScreenY()));
                                            eY = e.getScreenY();
                                        }
                                    }
                                });
                            }
                            else
                                if(Y>sH-w) {
                                    scene.setCursor(Cursor.V_RESIZE);
                                    eY = stage.getY() + stage.getHeight();
                                    root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                        @Override
                                        public void handle(MouseEvent e) {
                                            if((eStrtY>sH-w)&&(stage.getHeight()-(eY-e.getScreenY())>minH)) {
                                                stage.setHeight(stage.getHeight()-(eY-e.getScreenY()));
                                                eY = e.getScreenY();
                                            }
                                        }
                                    });
                                }
                                else
                                    if(X<w) {
                                        scene.setCursor(Cursor.H_RESIZE);
                                        eX = stage.getX();
                                        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                            @Override
                                            public void handle(MouseEvent e) {
                                                if((eStrtX<w)&&(stage.getWidth()+(eX-e.getScreenX())>minW)) {
                                                        stage.setX(e.getScreenX());
                                                        stage.setWidth(stage.getWidth()+(eX-e.getScreenX()));
                                                        eX = e.getScreenX();
                                                }
                                            }
                                        });
                                    }
                                    else
                                        if(X>sW-w) {
                                            scene.setCursor(Cursor.H_RESIZE);
                                            eX = stage.getX() + stage.getWidth();
                                            root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                                @Override
                                                public void handle(MouseEvent e) {
                                                    if((eStrtX>sW-w)&&(stage.getWidth()-(eX-e.getScreenX())>minW)) {
                                                        stage.setWidth(stage.getWidth()-(eX-e.getScreenX()));
                                                        eX = e.getScreenX();
                                                    }
                                                }
                                            });
                                        }
                                        else
                                            if((X>w)&&(X<sW-w)&&(Y>w)&&(Y<25)) {
                                                root.setOnMouseDragged(new EventHandler<MouseEvent>() {
                                                    @Override
                                                    public void handle(MouseEvent e) {
                                                        if((eStrtX>w)&&(eStrtX<sW-w-25*3)&&(eStrtY>w)&&(eStrtY<w+25)) {
                                                            stage.setX(e.getScreenX()-sceneStrtX);
                                                            stage.setY(e.getScreenY()-sceneStrtY);
                                                        }
                                                    }
                                                });
                                            }
                                            else
                                                scene.setCursor(Cursor.DEFAULT);
        }   
    });

    root.setOnMouseReleased(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent e) {
            eY = e.getScreenY();
            eX = e.getScreenX();
        }
    });
}

这篇关于为空舞台创建可调整大小的边框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆