将图像放入JavaFX 2表

时间:2013-05-02 15:11:02

标签: java user-interface javafx-2 tableview

我正在尝试做一些非常简单的事情。我想在表格中的特定行的列中放置一个图标。如果是文件夹,则显示文件夹图标。如果是文件,则显示文件图标。

有没有人知道如何在JavaFX 2中执行此操作?

我已经尝试了很多东西,这似乎应该非常简单,或者至少是某个地方的例子。

2 个答案:

答案 0 :(得分:6)

好的,所以我有一个巨大的虚拟时刻。原来我的图片网址路径错了。

我找到了一个网站,它为添加表格元素提供了一个很好的例子。这有助于我理解一切。

现在,如果我之前尝试过的4种不同方式都可行,我不知道,因为我的图片网址路径错误。但无论如何这里是链接和代码片段。

最重要的是,您需要拥有CellValueFactoryCellFactory。我试图使用其中一个或。 TableCell中的updateItem模板方法依赖于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;
    }

});

答案 1 :(得分:3)

如果提供的答案对你不起作用(就像它对我没有用),这就是我找到的解决方案(当然你还需要创建tableView并向其中添加列):< / p>

//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())));
}