我想创建一个桌面项目。在那个如果程序没有使用几分钟,它应该自动显示登录屏幕。我知道可以使用Web应用程序中的http servlet会话轻松完成(正如一些朋友所说)。但是在javafx或桌面应用程序中它是如何实现的。谁能告诉我......请
答案 0 :(得分:1)
好的,基于Working with Event Filters,你可以做点像......
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);
}
}
现在,所有这些确实为您提供了有关事件发生时间的信息。您需要设置某种&#34;超时&#34;,可能类似于JavaFX periodic background task。
我个人的想法是让Timeline
在短时间内运行(也许1-5秒)并检查最后输入的时间长度,如果超过&#34;超时&#34;期间,您可以切换到登录视图。这样,您就不需要继续停止并启动Timeline
。
为此,我将使用Java 8中引入的新日期/时间API。有关详细信息,请参阅Period and Duration
我也发现......
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
。