From 7d9967bbb5250089383f3193a00703901cb61a8f Mon Sep 17 00:00:00 2001 From: Timi Date: Fri, 24 Apr 2026 11:06:46 +0800 Subject: [PATCH] add ctrl+s and ctrl+w --- .../com/imyeyu/hosts/ui/FXApplication.java | 23 ++++++++++----- .../java/com/imyeyu/hosts/ui/ctrl/Main.java | 29 +++++++++++-------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/imyeyu/hosts/ui/FXApplication.java b/src/main/java/com/imyeyu/hosts/ui/FXApplication.java index a5ecf49..319c464 100644 --- a/src/main/java/com/imyeyu/hosts/ui/FXApplication.java +++ b/src/main/java/com/imyeyu/hosts/ui/FXApplication.java @@ -5,8 +5,12 @@ import com.imyeyu.fx.ui.TimiFXUI; import com.imyeyu.hosts.ui.ctrl.Main; import com.imyeyu.inject.annotation.Inject; import com.imyeyu.inject.annotation.TimiInjectApplication; +import javafx.application.Platform; import javafx.application.Application; import javafx.scene.Scene; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; import javafx.stage.Stage; /** @@ -22,13 +26,18 @@ public class FXApplication extends Application implements TimiFXUI { private Main main; @Override - public void start(Stage stage) { - FXTimiInject.run(FXApplication.class, this, stage); + public void start(Stage stage) { + FXTimiInject.run(FXApplication.class, this, stage); - Scene scene = new Scene(main, 900, 560); - scene.getStylesheets().addAll(CSS_STYLE, CSS_FONT, "style.css"); - stage.setTitle("TimiHosts"); - stage.setScene(scene); - stage.show(); + Scene scene = new Scene(main, 900, 560); + scene.getStylesheets().addAll(CSS_STYLE, CSS_FONT, "style.css"); + scene.getAccelerators().put(new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN), main::saveHosts); + scene.getAccelerators().put(new KeyCodeCombination(KeyCode.W, KeyCombination.CONTROL_DOWN), () -> { + stage.close(); + Platform.exit(); + }); + stage.setTitle("TimiHosts"); + stage.setScene(scene); + stage.show(); } } diff --git a/src/main/java/com/imyeyu/hosts/ui/ctrl/Main.java b/src/main/java/com/imyeyu/hosts/ui/ctrl/Main.java index f94123e..aa29ecb 100644 --- a/src/main/java/com/imyeyu/hosts/ui/ctrl/Main.java +++ b/src/main/java/com/imyeyu/hosts/ui/ctrl/Main.java @@ -37,18 +37,7 @@ public class Main extends MainView { private void init() { add.setOnAction(e -> table.getItems().add(new Host())); // 绑定保存按钮事件 - save.setOnAction(e -> { - try { - int count = hostService.save(); - labelTips.info("已保存 %d 条映射".formatted(count)); - } catch (AccessDeniedException ex) { - log.error("写入 hosts 失败: 权限不足", ex); - labelTips.error("保存失败: 权限不足,请以管理员身份运行"); - } catch (IOException ex) { - log.error("写入 hosts 失败", ex); - labelTips.error("保存失败: %s".formatted(ex.getMessage())); - } - }); + save.setOnAction(e -> saveHosts()); // 加载初始数据 try { int count = hostService.refresh(); @@ -65,6 +54,22 @@ public class Main extends MainView { } } + /** + * 保存当前 hosts 映射。 + */ + public void saveHosts() { + try { + int count = hostService.save(); + labelTips.info("已保存 %d 条映射".formatted(count)); + } catch (AccessDeniedException ex) { + log.error("写入 hosts 失败: 权限不足", ex); + labelTips.error("保存失败: 权限不足,请以管理员身份运行"); + } catch (IOException ex) { + log.error("写入 hosts 失败", ex); + labelTips.error("保存失败: %s".formatted(ex.getMessage())); + } + } + @PostConstruct private void label() { Callback updateStatus = () -> {