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);



    }

Ответы (0 шт):