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
相关产品推荐
相关产品推荐

