我正在做一个应用程序,我需要创建 10 个文本字段并将值保存在我拥有的 XML 文件中。(我知道如何将其保存在XML中(
我遇到的问题是我想自动保存所有内容(在 XML 中(,而无需为每个变量重复 10 次代码。
我正在尝试反思。字段库来做(未完成(,但我不知道这是否是最好的解决方案。
public TextField Tf_TestI1;
public TextField Tf_TestF1;
public TextField Tf_TestI2;
public TextField Tf_TestF2;
public TextField Tf_TestI3;
public TextField Tf_TestF3;
public TextField Tf_TestI4;
public TextField Tf_TestF4;
public TextField Tf_TestI5;
public TextField Tf_TestF5;
//Pair them and save it in XML
private void stuffVariables(){
String nameField1= "Tf_TestI";
String nameField2= "Tf_TestF";
Field[] fields = Controller.class.getFields();
for (int i = 0; i <fields.length ; i++) {
if (fields[i].getName().startsWith(nameField1)){
for (int j = 0; j < fields.length ; j++) {
if (fields[j].getName().equals(nameField2+fields[i].getName().substring(fields[i].getName().length()-1))){
System.out.println("EQUALS : "+fields[i].getName() + " = "+ fields[j].getName());
try {
//System.out.println("1: "+fields[i].getValue);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
我正在尝试让测试初始和最终对最终最终将其保存为 XML,如下所示......
<TESTS>
<TEST>
<INITIAL>AD</INITIAL>
<FINAL>AVB</FINAL>
</TEST>
<TEST>
<INITIAL>AQEW</INITIAL>
<FINAL>AVFE</FINAL>
</TEST>
<!-- ... MORE TEST -->
<TESTS>
这不是你想要的方式。作为一般的经验法则,如果你觉得有必要使用反射,那你就做错了。
看起来您有任意数量的TextField
对象对。所以这是第一个停靠港 - 创建一个单独的类来容纳这些TextField
对:
class TextFieldPair {
private TextField initialVal;
private TextField finalVal;
public TextFieldPair(TextField initialVal, TextField finalVal) {
this.initialVal = initialVal;
this.finalVal = finalVal;
}
public TextField getInitialVal() {
return initialVal;
}
public TextField getFinalVal() {
return finalVal;
}
}
。然后,您需要任意数量的这些对象。每次你有任意数量的对象时,你都会想要使用某种类型的集合,比如列表,这样我们就可以像这样遍历它们:
public class Main {
private List<TextFieldPair> list = new ArrayList<>();
//...Other code that adds textfield objects to the above list
private void stuffVariables() {
for(TextFieldPair pair : list) {
System.out.println("Initial value: " + pair.getInitialVal().getText());
System.out.println("Initial value: " + pair.getFinalVal().getText());
}
}
}
然后,您将打印出从每个TextField
对象中取出的所有值,并且可以根据需要操作它们(例如输出 XML(。
我的主要目标是在添加更多文本字段时使其变得容易......使用HashMap,我只需要在他的值中添加一个键。在我的情况下,在密钥中使用数字使它更容易。
//[...]
Map<String, TextField> map; //Global variable
//I just have to add the new TextFields to the HashMap
private void mapSaveRangs() {
map = new HashMap<>();
map.put("rangInitial1", tfrangInitial1);
map.put("rangFinal1", tfrangFinal1);
map.put("rangInitial2", tfrangInitial2);
map.put("rangFinal2", tfrangFinal2);
map.put("rangInitial3", tfrangInitial3);
map.put("rangFinal3", tfrangFinal3);
map.put("rangInitial4", tfrangInitial4);
map.put("rangFinal4", tfrangFinal4);
map.put("rangInitial5", tfrangInitial5);
map.put("rangFinal5", tfrangFinal5);
}
private void rangsInPairsXML(Element peeRangs) {
String sKeyrInitial = "rangInitial";
String sValuerInitial;
String sKeyrFinal = "rangFinal";
String sValuerFinal;
//Making sure that we have pair of 2
if (map.size() % 2 == 0) {
//map half size loop
for (int numRang = 1; numRang <= map.size() / 2; numRang++) {
sValuerInitial = map.get(sKeyrInitial + numRang).getText();
sValuerFinal = map.get(sKeyrFinal + numRang).getText();
//Verifying values and saving it in peeRang (XML Element)
if (!(sValuerInitial.equals("") || sValuerFinal.equals(""))) {
Element eRang = new Element("RANG");
eRang.addContent(new Element("INITIAL").addContent(sValuerInitial));
eRang.addContent(new Element("FINAL").addContent(sValuerFinal));
peeRangs.addContent(eRang);
}
}
} else {
System.out.println("ERROR!!");
//[...]
}
}