我已经编写了自己的EventHandler,它没有做任何特殊的事情。这只是为了练习。他来了:
import javafx.event.EventHandler;
import javafx.stage.WindowEvent;
public class JavaFXMyWindowListener implements EventHandler<WindowEvent>{
@Override
public void handle(WindowEvent event) {
System.out.println("WindowEvent: " + event.getEventType());
if(event.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST){
System.out.println("Window closed");
event.consume();
}
if(event.getEventType() == WindowEvent.WINDOW_SHOWING){
System.out.println("Window activ");
}
if(event.getEventType() == WindowEvent.WINDOW_SHOWN){
System.out.println("Window opened");
}
if(event.getEventType() == WindowEvent.WINDOW_HIDDEN){
System.out.println("Window minimized");
}
if(event.getEventType() == WindowEvent.WINDOW_HIDING){
System.out.println("Window is going to be minimized");
}
}
}
我对最后一个 du if 有问题。 WINDOW_HIDDEN 和 WINDOW_HIDING 似乎不起作用,因为当我最小化窗口时,System.out 永远不会发生。其他 3 个事件有效。而且最上面的 System.out 不会发生,这意味着该事件永远不会发生。我在主类中添加了如下事件处理程序:
stage.addEventHandler(WindowEvent.ANY, new JavaFXMyWindowListener());
我找到了以下解决方法:
stage.iconifiedProperty().addListener(new ChangeListener<Boolean>() {
@Override public void changed(ObservableValue<? extends Boolean> prop, Boolean oldValue, Boolean newValue) {
if(newValue){
System.out.println("Window minimized");
}else{
System.out.println("Window was minimized and gets back now");
}
}
});
它正在做我想做的事情,但为什么 WINDOW_HIDDEN 和 WINDOW_HIDING 不起作用?我不明白,请帮忙。谢谢并致以问候。
最佳答案
HIDING
和 HIDDEN
分别表示“关闭”和“关闭”,未最小化(指的是 hide()
方法) 。
对于 Stage
,您可以使用 iconified
property 注册监听器。最小化时响应。
关于JavaFX:WindowEvent.WINDOW_HIDDEN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45660688/