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;//任务:保存分辨率值