How to get serialized fields with JavaFX reflecition API?

2

I have a form with several CheckBoxs, which I named c1, c2, c3, c4, c5 ... up to c66. So:

@FXML
private CheckBox c1;
@FXML
private CheckBox c2;
.
.
.
@FXML
private CheckBox c66;

Now I want to make an org.bson.Document to put all fields with their proper values. But to not have to put one by one, I would like to create a 'for'. But I do not know how to put the CheckBox by name. Something like this:

 Document doc = new Document();
 for (int x = 1; x <= 66; x++) {
     CheckBox checkBox = this.getDecleredField("c" + x); //isso aqui é que eu não sei fazer
     doc.append("c" + x , checkBox.isSelected());
 } 
    
asked by anonymous 15.09.2017 / 01:19

1 answer

1

Option 1:

Add your CheckBox to a CheckBox list, then navigate with a for loop like this:

ch1 = new CheckBox("1");
ch2 = new CheckBox("2");
ch3 = new CheckBox("3");

//[...]

List<CheckBox> listaCheckBox = new ArrayList<>();
listaCheckBox.addAll(Arrays.asList(ch1,ch2,ch3, ..., ch66));

for(int i = 0; i < 66; i++){
    System.out.println("ch" + i + ":" + ch.isSelected());
}

Option 2:

Retrieve the nodes in your dashboard for CheckBox:

// É uma lista para um tipo genérico, mas se todos os filhos forem
// Checkbox pode por ObservableList<CheckBox> e retirar o if
ObservableList<Node> listaNos = seuPane.getChildren();

// Você terá que passar a quantidade exata de nós para usar um contador
// nesse laço
for(Node n: listaNos){
    if(n instanceof CheckBox){
        System.out.println(((CheckBox) n).isSelected());
    }
}

Option 3:

You can use CheckComboBox / CheckListView / CheckTreeView from ControlsFX , they are very good components for this task. It would look like this:

// Criação do CheckListView
ObservableList<String> lista = FXCollections.observableArrayList();
lista.addAll("ch1","ch2","ch3",...,"ch66");
checklistview = new CheckListView(lista);

// Para pegar o texto de todos os selecionados é só fazer
ObservableList<String> s = adminUsuarioCbbSetor.getCheckModel().getCheckedItems();
    
18.09.2017 / 20:28