Можно вот так:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Pane root = new Pane();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
//подготавливаем список для листа
ObservableList<TestEntity> list = FXCollections.<TestEntity>observableArrayList();
list.addAll(
new TestEntity(new Button("button1"), "str1"),
new TestEntity(new Button("button2"), "str2"),
new TestEntity(new Button("button3"), "str3"));
ListView<TestEntity> listView = new ListView<TestEntity>(list);
//устанавливаем фабрику для отрисовки ячейки.
listView.setCellFactory(new Callback<ListView<TestEntity>, ListCell<TestEntity>>() {
@Override
public ListCell<TestEntity> call(ListView<TestEntity> param) {
//тут нужно собрать объект ListCell, и вернуть его
ListCell<TestEntity> listCell = new ListCell<TestEntity>(){
//отрисовка происходит здеся
@Override
protected void updateItem(TestEntity item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
//тут конструируешь все что захочешь
//или можешь подгружать fxml
HBox hBox = new HBox();
Label label = new Label(item.getString());
hBox.getChildren().addAll(item.getButton(), label);
//устанавливаем графику
setGraphic(hBox);
}
}
};
return listCell;
}
});
root.getChildren().add(listView);
}
class TestEntity{
Button button;
String string;
TestEntity(Button button, String str){
setButton(button);
setString(str);
}
public Button getButton() {
return button;
}
public void setButton(Button button) {
this.button = button;
}
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
}
public static void main(String[] args) {
launch(args);
}
}