使用Git-Crypt和GPG加密Git代码库中的敏感信息(二)

在之前的 使用Git-Crypt和GPG加密Git代码库中的敏感信息(一)介绍了git-crypt的一般用法,通过分发密匙达到加解密仓库中敏感数据的目的,但通过分发密钥,容易造成密钥泄露,实际应用中会结合GPG的公私钥来来分发Git-Crypt 加解密仓库敏感信息的权限 ,如果对GPG不了解可以阅读GPG加密与数字签名以及在Git 中使用GPG签名提交 了解一下GPG的基本用法。

git-crypt 添加GPG公钥用户

GPG 的私钥和公钥其实代表了拥有这个GPG公私钥的用户的身份,可以通过使用git-crypt命令添加GPG 公钥用户到使用git-crypt加密敏感数据的git 代码仓库,从而让此GPG 公钥用户有git-crypt unlock的权限,具体操作使用如下命令。

首先获取当前机器的GPG 公钥列表

PS C:\Users\David> gpg --list-keys --keyid-format=long
[keyboxd]
---------
pub   rsa1024/B26A154E6EE71E72 2024-02-20 [SC] [expires: 2034-02-17]
      96964DABF5A3A10BE371FB34B26A154E6EE71E72
uid                 [ultimate] David Wang <davidwang@gmail.com>
sub   rsa1024/C1305211C9667A9E 2024-02-20 [E] [expires: 2034-02-17]

然后在代码从仓库根目录运行如下命令

git-crypt add-gpg-user B26A154E6EE71E72

这个命令会在根目录下创建一个使用keyid匹配的GPG 公钥加密git-crypt init产生的用于加解密代码仓库敏感信息的对等密匙产生的文件。这里有两层密钥,第一层是git-crypt init产生的密钥,这是一个对等密匙,用于加解密仓库敏感信息&

<think>好的,我现在需要帮助用户解决在JavaFX中设置全屏窗口时扣除任务栏高度的问题。首先,我要确认用户的需求:他们希望当窗口全屏时,应用程序的界面不会覆盖任务栏,而是调整高度,留出任务栏的空间。 接下来,我需要回忆JavaFX中关于全屏设置的API。记得JavaFX的Stage类有一个setFullScreen方法,可以启用全屏模式。但是,默认情况下,全屏可能会占用整个屏幕,包括任务栏区域,这在某些操作系统中可能不是用户期望的效果。 用户提到需要扣除任务栏的高度,这意味着需要获取屏幕的可视区域(即不包括任务栏的部分)。JavaFX的Screen类可能有相关的方法。Screen类提供了获取屏幕尺寸的方法,比如getBounds()返回整个屏幕的尺寸,而getVisualBounds()返回可视区域,也就是扣除任务栏后的尺寸。所以应该使用getVisualBounds()来获取正确的尺寸。 接下来,我需要考虑如何将这些信息应用到Stage的设置中。当用户启用全屏时,可能需要手动设置窗口的尺寸位置,而不是依赖默认的全屏行为。也就是说,可能需要禁用默认的全屏模式,而是将窗口设置为最大化,并调整尺寸以适应可视区域。 另外,还要考虑不同操作系统的差异,比如Windows、macOSLinux处理任务栏的方式可能不同,但Screen.getVisualBounds()应该能处理这些差异,因为它提供了平台无关的接口。 然后,我需要编写示例代码,展示如何获取可视区域的高度宽度,并将窗口设置为该尺寸,同时定位到正确的位置。同时,可能需要监听屏幕尺寸的变化,比如当用户连接或断开外接显示器时,应用程序需要动态调整窗口尺寸。 最后,还要提醒用户注意全屏模式窗口模式的区别,以及如何通过Stage的setX、setY、setWidth、setHeight方法来调整窗口。此外,如果用户确实需要使用全屏模式,可能需要结合全屏属性手动调整尺寸,但这可能会因平台而异,需要进一步测试。 总结步骤: 1. 使用Screen.getVisualBounds()获取扣除任务栏后的可视区域。 2. 将Stage的尺寸设置为可视区域的尺寸。 3. 将Stage的位置设置为可视区域的左上角坐标。 4. 禁用默认全屏,改为手动调整窗口尺寸位置。 5. 添加监听器以应对屏幕尺寸变化。 6. 提供代码示例注意事项。</think>在JavaFX中,要实现全屏窗口时扣除任务栏高度的效果,可以通过以下步骤实现: ### 解决方案 1. **获取屏幕可视区域** 使用`Screen.getVisualBounds()`获取扣除系统任务栏后的可用区域: ```java Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds(); ``` 2. **设置窗口参数** 将Stage的尺寸位置绑定到可视区域: ```java stage.setX(visualBounds.getMinX()); stage.setY(visualBounds.getMinY()); stage.setWidth(visualBounds.getWidth()); stage.setHeight(visualBounds.getHeight()); ``` 3. **禁用默认全屏模式** 通过设置`stage.setFullScreen(false)`保持窗口模式,避免系统级全屏覆盖任务栏。 4. **动态监听屏幕变化** 添加屏幕监听器实现自适应调整: ```java Screen.getScreens().addListener((ListChangeListener<Screen>) c -> { Rectangle2D newBounds = Screen.getPrimary().getVisualBounds(); stage.setWidth(newBounds.getWidth()); stage.setHeight(newBounds.getHeight()); }); ``` ### 完整示例代码 ```java public class AdjustedFullscreen extends Application { @Override public void start(Stage stage) { // 获取可视区域 Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds(); // 设置窗口参数 stage.setX(visualBounds.getMinX()); stage.setY(visualBounds.getMinY()); stage.setWidth(visualBounds.getWidth()); stage.setHeight(visualBounds.getHeight()); // 配置场景 StackPane root = new StackPane(new Label("自适应全屏内容")); Scene scene = new Scene(root, Color.LIGHTGRAY); stage.setScene(scene); // 保持窗口模式 stage.setFullScreen(false); stage.show(); } } ``` ### 关键注意事项 1. **多显示器适配**:`Screen.getScreensForRectangle()`可处理多显示器场景 2. **全屏模式限制**:真正的全屏模式会覆盖系统任务栏,建议采用本方案的"伪全屏"方式 3. **DPI缩放**:JavaFX默认支持高DPI缩放,但需在`main()`中添加`System.setProperty("prism.allowhidpi", "true")` ### 扩展应用 该方案同样适用于需要精确控制窗口位置的场景,如: - 多窗口对齐展示 - 触摸屏界面布局 - 视频播放器控制栏保留
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值