如何通过hashmap传递“toEncrypt”文本并将其显示在“加密”标签上?这一直困扰着我。我只能得到用户想要加密的内容而不加密显示在标签上。
@FXML
Button encrypt;
@FXML
Label encrypted;
@FXML
TextField toEncrypt;
@FXML
private void encryptButton(ActionEvent event) {
encrypted.setText(toEncrypt.getText());
}
@FXML
private void secretMessage (ActionEvent event) {
HashMap<String,String> secret = new HashMap<String, String>();
//*****UPPER CASE LETTERS*****
secret.put("A","9");
secret.put("B","J");
secret.put("C","Q");
secret.put("D","1");
secret.put("E","T");
secret.put("F","B");
secret.put("G","Z");
secret.put("H","R");
secret.put("I","t");
secret.put("J","m");
secret.put("K","q");
secret.put("L","p");
secret.put("M","o");
secret.put("N","3");
secret.put("O","v");
secret.put("P","y");
secret.put("Q","X");
secret.put("R","z");
secret.put("S","l");
secret.put("T","S");
secret.put("U","5");
secret.put("V","w");
secret.put("W","C");
secret.put("X","K");
secret.put("Y","8");
secret.put("Z","n");
//**********************
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
答案 0 :(得分:1)
很高兴看到你已经尝试过的东西;所以我不仅要提供一个完整的,有效的答案,而且还要指出一些可以让你前进的概念。
对于“通过HashMap
”步骤,您可以像char
一样迭代String
,如下所示:
final String toEncryptString = toEncrypt.getText();
final char[] encrypted = new char[toEncryptString.length()];
for (int i = 0; i < toEncryptString.length(); i++) {
final char c = toEncryptString.charAt(i);
final char e;
// TODO - Set 'e' from getting the value from the HashMap
encrypted[i] = e;
}
return new String(encrypted);
我假设你在某处设置了这个,但是你没有在你共享的代码中设置encrypt
Button
的逻辑。 Button
有一个setOnAction
,您应该可以使用encrypt.setOnAction(this::encryptButton);
,例如:
Button
在尝试使用HashMap
之前,您只需找到设置此位置始终的地方。
最后,如果没有提到将static
构造为方法的一部分似乎很奇怪(每次尝试加密某些东西时都必须这样做),那将是我的疏忽。将此设置为字段(或类似 - static char getEncrypted(final char given) { return map.get(given); }
字段,隐藏在实用程序类中,通过null
访问)将更具性能(尽管确保您正在处理潜在的[edemon@CentOS workspace]$ ./while.sh
[edemon@CentOS workspace]$
s无论你采取何种解决方案。
希望这能让你开始。