我正在尝试做一些非常简单的事情。我想在表格中的特定行的列中放置一个图标。如果是文件夹,则显示文件夹图标。如果是文件,则显示文件图标。
有谁知道如何在 JavaFX 2 中做到这一点?
我已经尝试了很多东西,这似乎应该很简单,或者至少是某个地方的一个例子。
我正在尝试做一些非常简单的事情。我想在表格中的特定行的列中放置一个图标。如果是文件夹,则显示文件夹图标。如果是文件,则显示文件图标。
有谁知道如何在 JavaFX 2 中做到这一点?
我已经尝试了很多东西,这似乎应该很简单,或者至少是某个地方的一个例子。
好的,所以我有一个巨大的虚拟时刻。原来我的图片 url 路径错误。
我确实找到了一个为表格添加元素提供了一个很好的例子的网站。这帮助我理解了一切。
现在,如果我之前尝试过的 4 种不同的方法有效,我不知道,因为我的图片 url 路径是错误的。但无论如何,这里是链接和代码片段。
底线是您需要拥有CellValueFactory
和CellFactory
。我试图使用或。updateItem
TableCell 中的模板方法依赖于从CellValueFactory
.
http://blog.ngopal.com.np/2011/10/01/tableview-cell-modifiy-in-javafx/
TableColumn albumArt = new TableColumn("Album Art");
albumArt.setCellValueFactory(new PropertyValueFactory("album"));
albumArt.setPrefWidth(200);
// SETTING THE CELL FACTORY FOR THE ALBUM ART
albumArt.setCellFactory(new Callback<TableColumn<Music,Album>,TableCell<Music,Album>>(){
@Override
public TableCell<Music, Album> call(TableColumn<Music, Album> param) {
TableCell<Music, Album> cell = new TableCell<Music, Album>(){
@Override
public void updateItem(Album item, boolean empty) {
if(item!=null){
HBox box= new HBox();
box.setSpacing(10) ;
VBox vbox = new VBox();
vbox.getChildren().add(new Label(item.getArtist()));
vbox.getChildren().add(new Label(item.getAlbum()));
ImageView imageview = new ImageView();
imageview.setFitHeight(50);
imageview.setFitWidth(50);
imageview.setImage(new Image(MusicTable.class.getResource("img").toString()+"/"+item.getFilename()));
box.getChildren().addAll(imageview,vbox);
//SETTING ALL THE GRAPHICS COMPONENT FOR CELL
setGraphic(box);
}
}
};
System.out.println(cell.getIndex());
return cell;
}
});
如果提供的答案对您不起作用(就像对我不起作用),这就是我找到的解决方案(当然您仍然需要创建 tableView 并向其中添加列):
//Create your column that will hold the image
private final TreeTableColumn<YourObjectClass,ImageView> columnImage= new TreeTableColumn<YourObjectClass,ImageView>("Image");
public void start() {
//Set your cellValueFactory to a SimpleObjectProperty
//Provided that your class has a method "getImage()" this will work beautifully!
columnImage.setCellValueFactory(c-> new SimpleObjectProperty<ImageView>(new ImageView(c.getValue().getValue().getImage())));
}