JavaFX:ChangeListener以获得鼠标屏幕的分辨率

JavaFX:ChangeListener以获得鼠标屏幕的分辨率,javafx,screen-resolution,Javafx,Screen Resolution,如何获得屏幕应用程序的分辨率(在调整大小期间),但仅在释放鼠标之后 我到处找了找,但什么也没找到。我已经做到了: scene.widthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue

如何获得屏幕应用程序的分辨率(在调整大小期间),但仅在释放鼠标之后

我到处找了找,但什么也没找到。我已经做到了:

scene.widthProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        ConfigBusiness.getInstance().setScreenWidth(newValue.intValue());
    }
});

scene.heightProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        ConfigBusiness.getInstance().setScreenHeight(newValue.intValue());
    }
});
我标记了在调整大小过程中所做的更改(借助于
widthProperty
heightProperty
),并将更改后的值设置为true,然后在释放鼠标时,设置更改后的值

问题是没有触发最后一个释放的事件
鼠标
。我看到的是
changeListener
s的输出,而不是
eventFilter
。有什么想法吗?

将侦听器挂接到场景上(使用MouseEvent.MOUSE_RELEASED)并在鼠标释放时写入设置屏幕高度/宽度的值(在每次鼠标释放时)

如果您只想在拖动时写入值并调整大小,请在change()中使用布尔标志“flag=true on change”方法来指示更改已开始,在鼠标释放后,只需在任意位置写入值并将flag设置为(flag=false)。

将侦听器挂接到场景上(使用MouseEvent.mouse\u RELEASED)并在鼠标释放时写入设置屏幕高度/宽度的值(在每次鼠标释放时)


如果您只想在拖动时写入值并调整大小,请在change()方法中使用布尔标志“flag=true on change”来指示更改已开始,在鼠标松开后,只需在任何位置写入值并将flag设置为(flag=false).

如果您希望每次释放鼠标以获得监视器屏幕的分辨率,请参见以下代码:

假设您有
阶段
场景
的代码,您可以为
鼠标释放事件
添加一个监听器,如下所示:

public double screenWidth ;
public double screenHeight;

.......

scene.setOnMouseReleased(m->{
     screenWidth = Screen.getPrimary().getBounds().getWidth();
     screenHeight = Screen.getPrimary().getBounds().getHeight();
});

......
如果您有一个未装饰的窗口,您可以手动调整其大小 当拖动鼠标时,我建议您使用
setonmousedrable()

假设您正在执行上述操作,则此代码用于移动窗口 手动操作可能很有用:

public int initialX;
公共int初始值;
public double screenWidth=Screen.getPrimary().getBounds().getWidth();
公共双屏幕高度=Screen.getPrimary().getBounds().getHeight();
设置鼠标按下(m->{
if(m.getButton()==MouseButton.PRIMARY){
如果(m.getClickCount()==1){//单击一次
setCursor(Cursor.MOVE);
if(window.getWidth(){
if(window.getWidth()setCursor(Cursor.DEFAULT));

如果您想在每次释放鼠标时获得监视器屏幕的分辨率以下是代码:

假设您有
阶段
场景
的代码,您可以为
鼠标释放事件
添加一个监听器,如下所示:

public double screenWidth ;
public double screenHeight;

.......

scene.setOnMouseReleased(m->{
     screenWidth = Screen.getPrimary().getBounds().getWidth();
     screenHeight = Screen.getPrimary().getBounds().getHeight();
});

......
如果您有一个未装饰的窗口,您可以手动调整其大小 当拖动鼠标时,我建议您使用
setonmousedrable()

假设您正在执行上述操作,则此代码用于移动窗口 手动操作可能很有用:

public int initialX;
公共int初始值;
public double screenWidth=Screen.getPrimary().getBounds().getWidth();
公共双屏幕高度=Screen.getPrimary().getBounds().getHeight();
设置鼠标按下(m->{
if(m.getButton()==MouseButton.PRIMARY){
如果(m.getClickCount()==1){//单击一次
setCursor(Cursor.MOVE);
if(window.getWidth(){
if(window.getWidth()setCursor(Cursor.DEFAULT));

我终于找到了一种方法来“或多或少”实现我想要的。下面是那些正在寻找如何做到这一点的人的代码

        ChangeListener<Number> resizeListener = new ChangeListener<Number>() {
            Timer timer = null; // used to schedule the saving task
            final long delay = 200; // the delay between 2 changes
            TimerTask task = null; // the task : saves resolution values

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                // cancels the old task as a new one has been queried
                // at every change, we cancel the old task and start a new one
                if(task != null) task.cancel();
                // reset of the timer
                if(timer == null) timer = new Timer();

                task = new TimerTask() {
                    @Override
                    public void run() {
                            ConfigBusiness.getInstance().setScreenWidth(scene.getWidth());
                            ConfigBusiness.getInstance().setScreenHeight(scene.getHeight());
                            // stopping the timer once values are set
                            timer.cancel();
                            timer = null;
                            // stopping the task once values are set
                            task.cancel();
                            task = null;
                        }
                    };

                timer.schedule(task, delay);
            }
        };

        scene.widthProperty().addListener(resizeListener);
        scene.heightProperty().addListener(resizeListener);
ChangeListener resizeListener=new ChangeListener(){
Timer=null;//用于计划保存任务
最终长延迟=200;//两次更改之间的延迟
TimerTask task=null;//任务:保存分辨率值
@凌驾

public void changed(observevalue我终于找到了一种方法来“或多或少”实现我想要的

        ChangeListener<Number> resizeListener = new ChangeListener<Number>() {
            Timer timer = null; // used to schedule the saving task
            final long delay = 200; // the delay between 2 changes
            TimerTask task = null; // the task : saves resolution values

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                // cancels the old task as a new one has been queried
                // at every change, we cancel the old task and start a new one
                if(task != null) task.cancel();
                // reset of the timer
                if(timer == null) timer = new Timer();

                task = new TimerTask() {
                    @Override
                    public void run() {
                            ConfigBusiness.getInstance().setScreenWidth(scene.getWidth());
                            ConfigBusiness.getInstance().setScreenHeight(scene.getHeight());
                            // stopping the timer once values are set
                            timer.cancel();
                            timer = null;
                            // stopping the task once values are set
                            task.cancel();
                            task = null;
                        }
                    };

                timer.schedule(task, delay);
            }
        };

        scene.widthProperty().addListener(resizeListener);
        scene.heightProperty().addListener(resizeListener);
ChangeListener resizeListener=new ChangeListener(){
Timer=null;//用于计划保存任务
最终长延迟=200;//两次更改之间的延迟
TimerTask task=null;//任务:保存分辨率值