【发布时间】:2017-10-27 15:19:01
【问题描述】:
我有一个TableView,它列出了给定文件夹中的文件。在 TableView 中,我有一列包含一个按钮,单击该按钮可打开文件。
我试图让文件的文件类型图标显示为该按钮的图形。例如,.xlsx 文件将显示 Microsoft Excel 图标,.pdf 文件将显示 Adobe PDF 图标。
根据我的研究,我了解到 JavaFX 没有本地方式来获取文件的关联图标,因此我需要进行一些严格的 Swing 转换。
但是,我无法弄清楚如何在 CellFactory 中执行此操作。
这是我目前的部分代码,我需要在其中添加代码以获取文件的图标:
colOpenFile.setCellFactory(col -> {
final javafx.scene.control.Button btnOpen = new Button();
final ImageView openIcon;
TableCell<FileResource, FileResource> cell = new TableCell<FileResource, FileResource>() {
@Override
protected void updateItem(FileResource item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
setText(null);
} else {
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File(cell.getItem().getFilename()));
setAlignment(Pos.CENTER);
openIcon = fetchFileIcon(item.getFilename());
openIcon.setFitWidth(16);
openIcon.setFitHeight(16);
btnOpen.setGraphic(openIcon);
setGraphic(btnOpen);
}
}
};
}
我还没有完成这个实现的尝试,因为我已经知道这会引发 Exception,因为 cell 可能尚未初始化。
如何获取显示在该行上的FileResource 的文件图标并将其分配给同样在该行中的Button?
谢谢!
【问题讨论】:
-
“由于
cell可能尚未初始化而引发异常”是什么意思?什么例外?在初始化之前,您指的是哪里的单元格? -
@James_D
Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File(cell.getItem().getFilename()));在updateItem方法中。 -
那么例外是什么?什么时候发生?
-
对不起,这是编译器错误,不是异常。
Error:(392, 103) java: variable cell might not have been initialized