java - 将图像放入 tableColumn - updateItem 从未使用

标签 java user-interface javafx javafx-8

我正在尝试将图像添加到 tableView,并经历了几个问题和答案,但它仍然不起作用。

tableView 中的其他字段(如名称)已正确加载。

Intelij 告诉我 updateItem 从未使用过,这可能就是它不起作用的原因,但我不知道如何调试它......

这是我到目前为止得到的

    @FXML private TableColumn<PlayerManager, Image> tableColumnType;
    @FXML private void initialize(){

    tableColumnType.setCellFactory(param -> {
        //Set up the ImageView
        final ImageView imageview = new ImageView();
        imageview.setFitHeight(10);
        imageview.setFitWidth(10);
        ///imageview.setImage(imageComputer); //uncommenting this places the image on all cells, even empty ones
        //Set up the Table
        TableCell<PlayerManager, Image> cell = new TableCell<PlayerManager, Image>() {
            public void updateItem(PlayerManager item, boolean empty) {
                if (item != null) {  // choice of image is based on values from item, but it doesn't matter now
                    imageview.setImage(imageComputer);
                }
            }
        };

        // Attach the imageview to the cell
        cell.setGraphic(imageview);
        return cell;
    });
    }

我遇到的问题是:

How to add an Image into a JavaFx TableView column

Display image in table

Inserting images into TableView rows - JavaFX

最佳答案

updateItem的签名方法错误:应该是

public void updateItem(Image item, boolean empty) { /* ... */ }

如果编译器拒绝 @Override注释,那么您就知道您没有定义正确的方法。所以你应该使用@Override如果出现编译错误,则表明出现了问题。

所以你应该能够做到

@FXML private TableColumn<PlayerManager, Image> tableColumnType;
@FXML private void initialize(){

tableColumnType.setCellFactory(param -> {
        //Set up the ImageView
        final ImageView imageview = new ImageView();
        imageview.setFitHeight(10);
        imageview.setFitWidth(10);
        ///imageview.setImage(imageComputer); //uncommenting this places the image on all cells, even empty ones
        //Set up the Table
        TableCell<PlayerManager, Image> cell = new TableCell<PlayerManager, Image>() {
            @Override
            public void updateItem(Image item, boolean empty) {
                if (item != null) {  // choice of image is based on values from item, but it doesn't matter now
                    imageview.setImage(imageComputer);
                }
            }
        };

        // Attach the imageview to the cell
        cell.setGraphic(imageview);
        return cell;
    });
}

如果您的表格单元格需要访问实际的PlayerManager对象,那么您需要将表列设为 TableColumn<PlayerManager, PlayerManager>并更新cellValueFactory (你还没有显示)相应地。

最后,请注意您的 updateItem(...)方法需要处理所有情况,包括项目为空的空单元格。

所以你可能需要类似的东西

@FXML private TableColumn<PlayerManager, PlayerManager> tableColumnType;
@FXML private void initialize(){

    tableColumnType.setCellValueFactory(cellData -> new SimpleObjectProperty<PlayerManager>(cellData.getValue());

    tableColumnType.setCellFactory(param -> {
        //Set up the ImageView
        final ImageView imageview = new ImageView();
        imageview.setFitHeight(10);
        imageview.setFitWidth(10);
        ///imageview.setImage(imageComputer); //uncommenting this places the image on all cells, even empty ones
        //Set up the Table
        TableCell<PlayerManager, PlayerManager> cell = new TableCell<PlayerManager, PlayerManager>() {
            @Override
            public void updateItem(PlayerManager item, boolean empty) {
                if (item != null) {  // choice of image is based on values from item, but it doesn't matter now
                    imageview.setImage(imageComputer);
                } else {
                    imageView.setImage(null);
                }
            }
        };

        // Attach the imageview to the cell
        cell.setGraphic(imageview);
        return cell;
    });
}

关于java - 将图像放入 tableColumn - updateItem 从未使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430859/

相关文章:

JavaFX:隐藏 Pane 很短时间

java - 初始化 Controller 和 FXML 链接 Controller 之间的区别?

java - 嵌套循环和数组(频率分析)

java - Java 中极慢的 XSLT 转换

ios - 我可以为 iPhone 和 iPad 提供两个单独的应用程序吗?

iphone - 更新 iPhone 4 Retina 显示屏的应用程序

c# - 如何使用现有的 Windows 功能从 UI 中提取文本

jquery - 如何在 javafx webview 中包含 jquery?

java - Mockito:验证 boolean 方法(或其他类型)

java - 使用客户端 Java 代码的 Spring Boot 多部分文件上传