如何能够反映字段库的值

  • 本文关键字:字段 何能够 java xml javafx
  • 更新时间 :
  • 英文 :


我正在做一个应用程序,我需要创建 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!!");
        //[...]
    }
}

相关内容

最新更新