javafx: как привязать текст кнопки к строке?
У меня ArrayList<MyObject> объектов, они заполнены и содержат информацию, например textField = название.
Я хочу привязать название кнопки к этому полю, чтобы когда я поменял это поле - кнопка поменяла название. Я пытался уже и через сеттер и внаглую, и bind(), и bindBidirectional(). Но при изменении textfield кнопка не меняет название.
Думаю, из-за прослойки в виде SimpleStringProperty она и не меняется.
Как это сделать?
package com.example.notes;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
public class MyObject implements Serializable {
String textField;
String textArea ;
ArrayList<File> listOfImages;
public String getTextField() {
return textField;
}
public void setTextField(String textField) {
this.textField = textField;
}
public String getTextArea() {
return textArea;
}
public void setTextArea(String textArea) {
this.textArea = textArea;
}
public ArrayList<File> getListOfImages() {
return listOfImages;
}
public void setListOfImages(ArrayList<File> listOfImages) {
this.listOfImages = listOfImages;
}
public MyObject() {
this.textField = "НЕПустое сообщение";
this.textArea = "Пустое сообщение";
this.listOfImages = new ArrayList<>();
}
public MyObject(String textField, String textArea, ArrayList<File> listOfImages) {
this.textField = textField;
this.textArea = textArea;
this.listOfImages = listOfImages;
}
public MyObject(String textField, String textArea) {
this.textField = textField;
this.textArea = textArea;
this.listOfImages = new ArrayList<>();
}
}
ArrayList<MyObject> array = getMyObjectsFrom(Path.of(MyNotesPath));
@FXML
void initialize() {
vboxList.prefWidthProperty().bind(scrollPane.widthProperty());
vboxList.prefHeightProperty().bind(scrollPane.heightProperty());
vboxList.setAlignment(Pos.TOP_CENTER);
//ArrayList <SimpleStringProperty> property = new ArrayList<>();
ArrayList <Button> listOfButtons = new ArrayList<>();
for (MyObject m:array) {
Button b = new Button();
b.textProperty().bindBidirectional(new SimpleStringProperty(m.textField));
b.setOnAction(actionEvent -> {
//System.out.println(b.textProperty().getClass());
array.get(1).textField="qwertyasdfghjklxzcvxcvxcvg";
});
listOfButtons.add(b);
// property.add(new SimpleStringProperty(m.textField));
}
vboxList.getChildren().addAll(listOfButtons);
System.out.println(listOfButtons.get(1));
System.out.println(listOfButtons.get(1).getText());
array.forEach(array-> System.out.println(array.getTextField()));
scrollPane.setContent(vboxList);
}