我正在尝试在tableView
中添加图片,但我无法添加图片。
我正在byte[]
中获取图片,我可以在imageView
中设置此图片,但有没有办法在tableView
中添加?
person3
上课:
public class person3 {
private final StringProperty firstName7 = new SimpleStringProperty("");
private final StringProperty firstName8 = new SimpleStringProperty("");
public person3(String firstName4, String firstName5) {
setFirstName7(firstName4);
setFirstName8(firstName5);
}
public String getFirstName7() {
return firstName7.get();
}
public void setFirstName7(String name) {
this.firstName7.set(name);
}
public StringProperty firstNameProperty7() {
return firstName7;
}
public String getFirstName8() {
return firstName8.get();
}
public void setFirstName8(String name) {
this.firstName8.set(name);
}
public StringProperty firstNameProperty8() {
return firstName8;
}
}
现在我正在尝试在tableview
中添加图片:
f51 = rs.getBytes(10);
System.out.println(f51);
ByteArrayInputStream bis = new ByteArrayInputStream(f51);
System.out.println(bis);
BufferedImage read = ImageIO.read(bis);
System.out.println(read);
Image image = SwingFXUtils.toFXImage(read, null);
table1.getItems().add(new person3("Data1", "data2"));
// this add simple data but how can I add image
想得到任何建议。谢谢。
答案 0 :(得分:10)
这个问题的一个可行的方法是创建简单的类,让我们说CustomImage
私有ImageView
对象初始化及其setter和getter。接下来,您可以使用此类指定TableView<T>
和TableColumn<T>
泛型类型,设置列的单元格值工厂,并使用图像填充表格。示例CustomImage
类的实现及其实际用法如下所示:
import javafx.scene.image.ImageView;
public class CustomImage {
private ImageView image;
CustomImage(ImageView img) {
this.image = img;
}
public void setImage(ImageView value) {
image = value;
}
public ImageView getImage() {
return image;
}
}
实际实施:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class ImageViewInTableView extends Application {
public Parent createContent() {
/* layout */
BorderPane layout = new BorderPane();
/* layout -> center */
TableView<CustomImage> tableview = new TableView<CustomImage>();
/* layout -> center -> tableview */
/* initialize two CustomImage objects and add them to the observable list */
ObservableList<CustomImage> imgList = FXCollections.observableArrayList();
CustomImage item_1 = new CustomImage(new ImageView(new Image("Icon_AddNewPatient.png")));
CustomImage item_2 = new CustomImage(new ImageView(new Image("Icon_EditPatient.png")));
imgList.addAll(item_1, item_2);
/* initialize and specify table column */
TableColumn<CustomImage, ImageView> firstColumn = new TableColumn<CustomImage, ImageView>("Images");
firstColumn.setCellValueFactory(new PropertyValueFactory<CustomImage, ImageView>("image"));
firstColumn.setPrefWidth(60);
/* add column to the tableview and set its items */
tableview.getColumns().add(firstColumn);
tableview.setItems(imgList);
/* add TableView to the layout */
layout.setCenter(tableview);
return layout;
}
@Override
public void start(Stage stage) throws Exception {
stage.setScene(new Scene(createContent()));
stage.setWidth(200);
stage.setHeight(200);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
这就是它的样子: