es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo colocar correctamente imágenes dentro de una TableView

Estoy intentando llenar un TableView con objetos que tienen ImageView como uno de sus valores, pero solo el último elemento en el TableView muestra la imagen, ninguno de los demás lo hace.

public class MainController implements Initializable {

    public TableView<apple> table;
    public TableColumn nameColumn;
    public TableColumn imageColumn;

    ImageView imageView = new ImageView(new Image("download.jpg"));
    Apple apple = new Apple("Bob", imageView);
    Apple apple2 = new Apple("John", imageView);
    Apple[] apples = {apple2, apple};
    List<apple> appleList = Arrays.asList(apples);

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        imageColumn.setCellValueFactory(new PropertyValueFactory<>("image"));
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
        table.setItems(FXCollections.observableArrayList(appleList));
    }
}
public class Apple {

    private final int SIZE = 20;

    String name;
    ImageView image;

    public Apple(String name, ImageView image) {
        this.name = name;
        this.image = image;
        image.setFitHeight(SIZE);
        image.setFitWidth(SIZE);

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ImageView getImage() {
        return image;
    }

    public void setImage(ImageView image) {
        this.image = image;
    }
}

No estoy seguro de por qué está sucediendo esto, he visto a personas en línea configurar las imágenes una por una utilizando bucles.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema es que todos los objetos en la matriz Apple[] están referenciando el mismo objeto ImageView. Por lo tanto, cuando se establece la Image para un objeto Apple, cambia la imagen de todos los objetos en la matriz ya que están referenciando el mismo objeto ImageView.

    Para solucionar esto, puedes crear un nuevo objeto ImageView para cada objeto Apple en el bucle donde estás creando la matriz Apple[]. De esta manera, cada objeto Apple tendrá su propio objeto ImageView y las imágenes se mostrarán correctamente en la TableView. Aquí tienes un fragmento de código de ejemplo:

    // crea un nuevo ImageView para cada objeto Apple
    Apple apple = new Apple("Bob", new ImageView(new Image("download.jpg")));
    Apple apple2 = new Apple("John", new ImageView(new Image("download.jpg")));
    Apple[] apples = {apple2, apple};
    

Comments are closed.