gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:23 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来将图像添加到 JavaFx TableView 列中,该列中的其他列中的数据通过 hibernate 从 H2 数据库中填充。 TableView 是在 JavaFx Scene Builder 中设计的。

到目前为止,这是我设法放在一起的:

Controller 类:

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.setImage("arrow.png"); 处收到一个错误,上面写着 Incopatibletypes: String cannot be converted to Image

这是我第一次尝试将图像添加到 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;
}
}

提前谢谢大家。

最佳答案

更新

由于该链接无效并且我收到了多次更新请求,因此我正在使用新答案更新此链接。

根据问题,我不确定 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"));

  1. NewBeautifulKiwi 中的 a 属性加载图像.自列TableColumn<NewBeautifulKiwi, Image> KiwiId;似乎它应该将自己绑定(bind)到 NewBeautifulKiwi 中缺少的属性图像.我将介绍它,稍后使用它绑定(bind)到此列(重命名为“kiwiImageCol”)的单元格值工厂。

代码:

@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 绑定(bind)到这个新属性

...
@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"));
}

过时的答案

您忘记将 KiwiId 与 CellValueFactory 绑定(bind).请仔细阅读以下示例,该示例在列中使用 VBox,因为它需要图像和标签。你可以直接使用 ImageView

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

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

关于java - 如何将图像添加到 JavaFx TableView 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22005115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com