我想创建一个桌面项目。如果该程序几分钟未使用,它应该会自动显示登录屏幕。我知道在Web应用程序中使用http servlet会话可以轻松完成(正如一些朋友所说(。 但是在javafx或桌面应用程序中如何实现。谁能告诉我...请
好的,所以基于使用事件过滤器,你可以做一些类似的事情......
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
TextField btn = new TextField();
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
scene.addEventFilter(KeyEvent.KEY_PRESSED, new KeyHandler());
scene.addEventFilter(KeyEvent.KEY_RELEASED, new KeyHandler());
scene.addEventFilter(KeyEvent.KEY_TYPED, new KeyHandler());
scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_ENTERED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_DRAGGED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_EXITED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_MOVED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new MouseHandler());
scene.addEventFilter(MouseEvent.MOUSE_RELEASED, new MouseHandler());
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
protected class KeyHandler implements EventHandler<KeyEvent> {
@Override
public void handle(KeyEvent event) {
System.out.println("Key Event");
}
}
protected class MouseHandler implements EventHandler<MouseEvent> {
@Override
public void handle(MouseEvent event) {
System.out.println("Mouse Event");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
现在,这一切真正做的是为您提供有关事件发生时间的信息。您需要设置某种"超时",也许是类似于JavaFX定期后台任务的东西。
我个人的想法是让一个Timeline
在短时间内(也许 1-5 秒(运行并检查上次输入的时间,如果超过"超时"期限,您可以切换到登录视图。 这样,您无需继续停止和启动Timeline
。
为此,我将使用 Java 8 中引入的新日期/时间 API。有关更多详细信息,请参阅期间和持续时间
啪......
我还发现...
scene.setOnKeyPressed(new KeyHandler());
scene.setOnKeyReleased(new KeyHandler());
scene.setOnKeyTyped(new KeyHandler());
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
也可以工作。
我没有测试过它,但Stage
也有addEventFilter
和addEventHandler
,这可能适合从上面到Stage
而不是Scene
建立相同的概念。