У меня есть ключ, который я хочу установить в значение каждого из 26 полей со списком, которые я сгенерировал с помощью цикла, следовательно, у меня нет fx: id, который я могу вызвать, чтобы установить значение.
У меня есть графический интерфейс, который содержит 26 комбинированных блоков или счетчик, в зависимости от значения другого комбинированного блока.Они автоматически генерируются перечислителем, который загружает их в пустое место в моем графическом интерфейсе (я установил 26 комбинированных полей, которые я сгенерирую, кодируя 1 из них (все они имеют одинаковые значения внутри) и используя цикл для генерации26 из них).Для 26 полей со списком у меня есть массив char [26], в котором я хочу установить для каждого поля со списком другое значение в массиве, но, поскольку они были сгенерированы с помощью цикла, я не могу установить уникальный fx: id для каждого поля со списком, чтобы я мог вызвать их, чтобы установить значения.Я думаю, что мне нужно как-то привязать их к массиву, но я очень плохо знаком с javafx / fxml, поэтому не знаю, как это сделать.
Это создает поля со списком:
private SubstitutionKey key;
public SubstitutionKeyEditorView(SubstitutionKey key) {
this.key = key;
FXMLLoader loader = new FXMLLoader(getClass().getResource("SubstitutionKeyEditor.fxml"));
loader.setController(this);
loader.setRoot(this);
try {
loader.load();
for (char x = 'A'; x <= 'Z'; x++) {
getChildren().add(new LetterSelectorView(String.valueOf(x), this)); //add 26 letter selectors (26 combo boxes)
}
} catch (IOException exc) {
throw new RuntimeException(exc);
}
}
SubstitutionKeyEditor.fxml только устанавливает тип для flowPane, поэтому они хорошо отображаются.
Это letterSelectorView:
@FXML
private Label letterLabel;
@FXML
private ComboBox letterSelection;
public LetterSelectorView(String letter, LetterChangedListener listener) {
FXMLLoader loader = new FXMLLoader(getClass().getResource("LetterSelector.fxml"));
//add the text and combo box to the place being loaded into
loader.setController(this);
loader.setRoot(this);
try {
loader.load();
letterLabel.setText(letter); //give the label the correct letter
letterSelection.getItems().add(" "); //add blank
for (char x = 'A'; x <= 'Z'; x++) {
letterSelection.getItems().add(String.valueOf(x)); //add all the letters to each combo box
}
letterSelection.valueProperty().addListener((obs, oldValue, newValue) -> listener.letterChanged(letter, (String) newValue));
//if value of combo box changes, rerun cipher
} catch (IOException exc) {
throw new RuntimeException(exc);
}
}
Я пытаюсь сделать все это из другого контроллера CipherController (в котором генерируется substitutionKeyEditorView).Здесь у меня есть буквы массива char [26], которые я хочу установить для каждого поля со списком, сгенерированного substitutionKeyEditorView, равным значению определенного индекса в этом массиве.
Надеюсь, это имеет смысл!