Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Problems Displaying an Image in a TableCell

2935950Apr 22 2015 — edited Apr 22 2015

I read a few tutorials online about adding images to a tableview tablecell and tried to implement what I learned from the tutorial, but I'm not having much luck. My problem is that the image is not being displayed in the table cell.

The problem is in the getTable Method of the ExampleProblem class. I know that "item" in the updateItem method of the setCellFactory is null and I can figure out why. I'm having a hard time understanding the callback part of the setCellFactory, which is making it difficult to figure out where my problem is located and why it is happening.

Hopefully, someone can help me out or at least point me in the right direction.

Thanks in advance for any help.

-Fred


package whitman.fa.encounter;

import javafx.application.Application;

import javafx.beans.property.IntegerProperty;

import javafx.beans.property.ObjectProperty;

import javafx.beans.property.SimpleIntegerProperty;

import javafx.beans.property.SimpleObjectProperty;

import javafx.beans.property.SimpleStringProperty;

import javafx.beans.property.StringProperty;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.geometry.Pos;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.scene.control.TableCell;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableView;

import javafx.scene.control.cell.PropertyValueFactory;

import javafx.scene.effect.DropShadow;

import javafx.scene.image.Image;

import javafx.scene.image.ImageView;

import javafx.scene.layout.BorderPane;

import javafx.scene.layout.GridPane;

import javafx.scene.layout.VBox;

import javafx.scene.paint.Color;

import javafx.scene.shape.Rectangle;

import javafx.scene.text.Font;

import javafx.scene.text.Text;

import javafx.stage.Stage;

import javafx.util.Callback;

public class ExampleProblem extends Application

{

  BorderPane rootLayout;

  ObservableList<Encounter> encounters = FXCollections.observableArrayList();

  ObservableList<MobPict> imgData = FXCollections.observableArrayList();

  Group root;

  Scene scene;

  GridPane pane;

  public ExampleProblem()

  {

  imgData.addAll(new MobPict("Bugbear.jpg","Bugbear"), new MobPict("po_BGArcher_h.png", "PC"));

  encounters.addAll(

  new Encounter(1,5,1,1,"Bugbear",0,0,null,3,"Bestiary pg 75", imgData.get(0)),

  new Encounter(6,15,1,1,"PC",0,0,null,3,"HeroLabs",imgData.get(1))

  );

  }

  @Override

  public void start(Stage primaryStage) throws Exception

  {

  primaryStage.setTitle("Table Test with image column");

  //Display TableView

  Group group = getBackground();

  VBox box = new VBox();

  box.setLayoutX(20);

  box.setLayoutY(5);

  box.setSpacing(15);

  Text text = new Text("Image Column test");

  text.setFont(new Font(20));

  TableView<Encounter> table = getTable();

  box.getChildren().addAll(text, table);

  group.getChildren().add(box);

  Scene scene = new Scene(group, 680,530,Color.web("#666666"));

  primaryStage.setScene(scene);

  primaryStage.show();

  }

  public Group getBackground()

  {

  Group group = new Group();

  group.setLayoutX(40);

  group.setLayoutY(40);

  Rectangle rect = new Rectangle();

  rect.setWidth(600);

  rect.setHeight(460);

  rect.setFill(Color.web("#f5f5f5"));

  DropShadow dropShadow = new DropShadow();

  dropShadow.setRadius(50);

  dropShadow.setOffsetX(0);

  dropShadow.setOffsetY(0);

  dropShadow.setColor(Color.web("#969696"));

  rect.setEffect(dropShadow);

  group.getChildren().add(rect);

  return group;

  }

  @SuppressWarnings("unchecked")

  public TableView<Encounter> getTable()

  {

  TableView<Encounter> imageTable = new TableView<Encounter>();

  TableColumn<Encounter, Number> minChanceCol = new TableColumn<Encounter, Number>("Min Chance");

  minChanceCol.setCellValueFactory(new PropertyValueFactory<Encounter, Number>("minChance"));

  TableColumn<Encounter, Number> maxChanceCol = new TableColumn<Encounter, Number>("Max Chance");

  maxChanceCol.setCellValueFactory(new PropertyValueFactory<Encounter, Number>("maxChance"));

  TableColumn<Encounter, MobPict> imgCol = new TableColumn<Encounter, MobPict>("Images");

  imgCol.setCellValueFactory(new PropertyValueFactory<Encounter, MobPict>("mobPicPath"));

  imgCol.setCellFactory(new Callback<TableColumn<Encounter,MobPict>,TableCell<Encounter,MobPict>>()

  {

  @Override

  public TableCell<Encounter, MobPict> call(TableColumn<Encounter, MobPict> param)

  {

  TableCell<Encounter, MobPict> cell = new TableCell<Encounter, MobPict>()

  {

  @Override

  public void updateItem(MobPict item, boolean empty)

  {

  //System.out.println("update Item called");

  //System.out.println(item.getMobName());

  if(item != null)

  {

  VBox box;

  ImageView imgView;

  box= new VBox();

  box.setAlignment(Pos.CENTER);

  imgView = new ImageView();

  imgView.setFitHeight(100);

  imgView.setFitWidth(100);

  imgView.setImage(new Image(TestApp.class.getResource("img").toString()+"/"+item.getMobPicPath()));

  box.getChildren().add(imgView);

  setGraphic(box);

  }

  }

  };

  return cell;

  };   

        });       

  imageTable.getColumns().addAll(minChanceCol,maxChanceCol, imgCol);

  imageTable.setItems(encounters);

  return imageTable;

  }

}

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 20 2015
Added on Apr 22 2015
0 comments
645 views