当前位置: 首页 > 知识库问答 >
问题:

如何将图像添加到JavaFx TableView列中

梁池暝
2023-03-14

我试图找到一种方法,将图像添加到JavaFx TableView列中,该列包含通过hibernate从H2数据库填充的其他列中的数据。TableView是在JavaFx场景生成器中设计的。

到目前为止,我一直在努力总结:

控制器类:

public class HomeController implements Initializable {

    @FXML
    private TableView<NewBeautifulKiwi> KIWI_TABLE;

    @FXML
    private TableColumn<NewBeautifulKiwi, Image> KiwiId;

    @FXML
    private TableColumn<NewBeautifulKiwi, String> Kiwi;

    public ObservableList<NewBeautifulKiwi> data;

    // Initializes the controller class.
    @Override
    public void initialize(URL url, ResourceBundle rb) {

        KiwiId.setCellFactory(new Callback<TableColumn<NewBeautifulKiwi, Image>, TableCell<NewBeautifulKiwi, Image>>() {
            @Override
            public TableCell<NewBeautifulKiwi, Image> call(TableColumn<NewBeautifulKiwi, Image> param) {
                //Set up the ImageView
                final ImageView imageview = new ImageView();
                imageview.setFitHeight(50);
                imageview.setFitWidth(50);

                //Set up the Table
                TableCell<NewBeautifulKiwi, Image> cell = new TableCell<NewBeautifulKiwi, Image>() {
                    public void updateItem(NewBeautifulKiwi item, boolean empty) {
                        if (item != null) {
                            imageview.setImage("arrow.png");
                        }
                    }
                };

                // Attach the imageview to the cell
                cell.setGraphic(imageview);
                return cell;
            }

        });

        Kiwi.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, String>("Kiwi"));
        KIWI_TABLE.setItems(gobbledyGook());
    }

    private ObservableList<NewBeautifulKiwi> gobbledyGook() {
        data = FXCollections.observableArrayList();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();
            List courses = session.createQuery("from KIWI_TABLE").list();
            for (Iterator iterator = courses.iterator(); iterator.hasNext();) {
                NewBeautifulKiwi course = (NewBeautifulKiwi) iterator.next();
                System.out.println(course.getKiwi());

                data.add(course);
            }
            transaction.commit();
        } catch (HibernateException e) {
            transaction.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }
        return data;
    }
}

我得到一个错误在imageview.set图像("arrow.png");Incopatibletypes:字符串不能转换为图像.

这是我第一次尝试将图像添加到TableView中。

我从昨天开始四处看看,但现在似乎被卡住了。我希望得到一些帮助。我非常感谢你的帮助。

这是创建数据库pojos的类:

@Entity(name = "KIWI_TABLE")
public class NewBeautifulKiwi implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int KiwiId;
    private String Kiwi;

    public int getKiwiId() {
        return KiwiId;
    }

    public void setKiwiId(int KiwiId) {
        this.KiwiId = KiwiId;
    }

    public String getKiwi() {
        return Kiwi;
    }

    public void setKiwi(String Kiwi) {
        this.Kiwi = Kiwi;
    }
}

提前谢谢大家。

共有2个答案

谷梁英资
2023-03-14

如果使用以下语句,则可以删除当前错误

imageview.setImage(new Image("arrow.png"));
柴茂材
2023-03-14

由于链接不起作用,而且我有多个更新请求,我正在用新的答案更新此链接。

从这个问题来看,我不确定OP是希望从NewBeautifulKiwi中的某个字段加载图像,还是希望为所有数据显示相同的图像。因此,我将对这两种方法负责。

注意:方法1对我来说没有多大意义,之所以存在,是因为我对OP的要求感到困惑。这个问题已经有4年了,我认为OP的澄清不会有任何影响。处理这类问题的建议方法是2。

  1. 为所有行加载相同的arrow.png

代码:

KiwiId.setCellFactory(new Callback<TableColumn<NewBeautifulKiwi, Integer>, TableCell<NewBeautifulKiwi, Integer>>() {
    @Override
    public TableCell<NewBeautifulKiwi, Integer> call(TableColumn<NewBeautifulKiwi, Integer> param) {
      ...
      TableCell<NewBeautifulKiwi, Integer> cell = new TableCell<NewBeautifulKiwi, Integer>() {
         public void updateItem(Integer item, boolean empty) {
            if (item != null) {
              imageview.setImage(new Image("arrow.png"));
            }
         }
      };
      // Attach the imageview to the cell
      cell.setGraphic(imageview);
      return cell;
    }
 });
 KiwiId.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, Integer>("KiwiId"));

代码:

@Entity(name = "KIWI_TABLE")
public class NewBeautifulKiwi implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int KiwiId;
    private String Kiwi;
    private Image kiwiImage;

    public int getKiwiId() {
        return KiwiId;
    }

    public void setKiwiId(int KiwiId) {
        this.KiwiId = KiwiId;
    }

    public String getKiwi() {
        return Kiwi;
    }

    public void setKiwi(String Kiwi) {
        this.Kiwi = Kiwi;
    }

    public Image getKiwiImage() {
        return kiwiImage;
    }

    public void setKiwiImage(Image kiwiImage) {
        this.kiwiImage = kiwiImage;
    }
}

在表中,我将TableColumn绑定到此新属性

...
@FXML
private TableColumn<NewBeautifulKiwi, Image> KiwiImageCol;
...
@Override
public void initialize(URL url, ResourceBundle rb) {
    KiwiImageCol.setCellFactory(param -> {
       //Set up the ImageView
       final ImageView imageview = new ImageView();
       imageview.setFitHeight(50);
       imageview.setFitWidth(50);

       //Set up the Table
       TableCell<NewBeautifulKiwi, Image> cell = new TableCell<NewBeautifulKiwi, Image>() {
           public void updateItem(Image item, boolean empty) {
             if (item != null) {
                  imageview.setImage(item);
             }
           }
        };
        // Attach the imageview to the cell
        cell.setGraphic(imageview);
        return cell;
   });
   KiwiImageCol.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, Image>("kiwiImage"));
}

你忘了用CellValueFactory绑定KiwiId。请阅读以下示例,该示例在列中使用VBox,因为它需要图像和标签。您可以直接使用ImageView

https://blogs.oracle.com/javajungle/entry/how_to_pretty_up_your

一切都描述得很好。如果您还有疑问,请随时发表评论!

 类似资料:
  • 问题内容: 我正在尝试找到一种将图像添加到JavaFx TableView列的方法,该图像具有通过hibernate从H2数据库填充的其他列中的数据。TableView是在JavaFx Scene Builder中设计的。 到目前为止,这是我设法做到的: 控制器类: 我说那是一个错误。 这是我第一次尝试将图像添加到TableView中。 从昨天开始,我一直四处张望,但现在似乎被困住了。我希望能有所

  • 问题内容: 最近8个小时我一直在阅读文档,但没有发现任何可以帮助我的东西。大概是,但是没有代码在工作,因为它一直说“找不到图像URL”并引发异常。但是我还有其他项目,从来没有这个问题。 因此,有一个类包含这样的月份: 到目前为止,一切都很好。我什至可以在控制台中对其进行测试,并且效果很好,并且可以按值排序。现在,当我尝试从资源中添加图像时,出现了我之前提到的问题:找不到URL。但是,我只能使用图像

  • 我不熟悉Java和OOP,一直在将图像添加到tableview列。代码似乎工作,我可以看到学生的名字正确,但图像没有显示在列中。我遇到了这个错误,无法理解如何使其工作: 学生模型: 和参与者场景,我有桌面视图: 如果可能有帮助,还可以添加讲座模型: 感谢您的帮助,谢谢!

  • 问题内容: 我有一个JPanel,我想向其中添加即时生成的JPEG和PNG图像。 到目前为止,我在Swing教程中看到的所有示例,特别是在Swing示例中,都使用ImageIcon。 我将这些图像生成为字节数组,它们通常比示例中使用的通用图标大,尺寸为640x480。 使用ImageIcon类在JPanel中显示该大小的图像时是否存在任何(性能或其他)问题? 什么是平常做的呢? 如何不使用Imag

  • 问题内容: 在我们的网站上,我们从各种来源上传了大量照片。 为了减小文件大小,我们使用mogrify从源中剥离所有exif数据: 我们想要做的是将一些基本的exif数据(如版权Initrode等)插回到这个新的“干净”图像上,但是我似乎在文档中找不到能实现此目的的任何东西。 有任何这样做的经验吗? 如果不能通过imagemagick完成,则基于PHP的解决方案将是下一件好事! 谢谢。 问题答案:

  • 问题内容: 我想在标题栏中添加图像(小图标)。 我该怎么做? 问题答案: 由于没有标题栏,因此我假设您是指。话虽这么说,使用。 这是使用的示例。