You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现:通过单选按钮切换加密方法的方案咨询

简便实现单选按钮选择加密方法的方案

我之前也遇到过类似的需求,其实JavaFX里有几种很直观的方式能搞定这个问题,给你分享几个实用的方案:

1. 最直观:ToggleGroup + 事件触发

这是最简单的入门方案,核心是用ToggleGroup把所有单选按钮归为一组,然后在需要执行加密的时候获取选中项即可。

首先在FXML里给单选按钮绑定同一个ToggleGroup:

<ToggleGroup fx:id="encryptionToggleGroup"/>
<RadioButton text="AES加密" toggleGroup="$encryptionToggleGroup" selected="true"/>
<RadioButton text="RSA加密" toggleGroup="$encryptionToggleGroup"/>
<RadioButton text="MD5哈希" toggleGroup="$encryptionToggleGroup"/>

然后在Controller里,通过ToggleGroup获取选中的按钮,再分支执行对应加密逻辑:

@FXML
private ToggleGroup encryptionToggleGroup;

// 比如点击加密按钮时触发
@FXML
private void onEncryptAction() {
    RadioButton selectedBtn = (RadioButton) encryptionToggleGroup.getSelectedToggle();
    if (selectedBtn == null) {
        // 处理未选中任何选项的情况,比如弹窗提示
        return;
    }

    String method = selectedBtn.getText();
    switch (method) {
        case "AES加密":
            performAESEncrypt(yourData);
            break;
        case "RSA加密":
            performRSAEncrypt(yourData);
            break;
        case "MD5哈希":
            performMD5Hash(yourData);
            break;
        default:
            // 处理未知选项
            break;
    }
}

2. 响应式:绑定属性+实时监听

如果需要在用户切换单选按钮时就实时做一些准备(比如加载加密参数、更新界面),可以用属性绑定的方式:

private StringProperty selectedEncryptMethod = new SimpleStringProperty("AES加密");

@FXML
public void initialize() {
    // 监听ToggleGroup的选中变化,同步到属性
    encryptionToggleGroup.selectedToggleProperty().addListener((obs, oldToggle, newToggle) -> {
        if (newToggle != null) {
            selectedEncryptMethod.set(((RadioButton) newToggle).getText());
        }
    });

    // 监听属性变化,实时响应
    selectedEncryptMethod.addListener((obs, oldVal, newVal) -> {
        System.out.println("已切换到加密方式:" + newVal);
        // 这里可以提前初始化加密器、更新参数输入框等
    });
}

3. 高扩展:策略模式避免臃肿

如果你的加密方法很多,不想写长长的switch-case,可以用策略模式来解耦UI和业务逻辑:

先定义加密策略接口:

public interface EncryptionStrategy {
    byte[] process(byte[] rawData) throws Exception;
}

然后实现各个加密类:

public class AESEncryptor implements EncryptionStrategy {
    @Override
    public byte[] process(byte[] rawData) throws Exception {
        // AES加密逻辑
        return rawData;
    }
}

public class RSAEncryptor implements EncryptionStrategy {
    @Override
    public byte[] process(byte[] rawData) throws Exception {
        // RSA加密逻辑
        return rawData;
    }
}

最后在Controller里维护策略映射,直接根据选中项获取对应策略执行:

private Map<String, EncryptionStrategy> strategyMap = new HashMap<>();

@FXML
public void initialize() {
    strategyMap.put("AES加密", new AESEncryptor());
    strategyMap.put("RSA加密", new RSAEncryptor());
    strategyMap.put("MD5哈希", new MD5Hasher());
}

@FXML
private void onEncryptAction() {
    RadioButton selectedBtn = (RadioButton) encryptionToggleGroup.getSelectedToggle();
    if (selectedBtn == null) return;

    EncryptionStrategy strategy = strategyMap.get(selectedBtn.getText());
    if (strategy != null) {
        try {
            byte[] result = strategy.process(yourRawData);
            // 处理加密结果
        } catch (Exception e) {
            // 异常处理
        }
    }
}

如果你的FXML布局里有特殊的绑定问题(比如单选按钮没正确加入ToggleGroup、Controller注入失败等),可以把FXML代码贴出来,我帮你排查具体问题~

内容的提问来源于stack exchange,提问作者Jens Dissing Poulsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:53:30