css - JavaFX 8 Custom RowFactory ContextMenu 背景图像不完全可见

标签 css javafx contextmenu menuitem

我设置了以下自定义行工厂:

treeTblViewFiles.setRowFactory(new Callback<TreeTableView<FileModel>, TreeTableRow<FileModel>>() {

            @Override
            public TreeTableRow<FileModel> call(TreeTableView<FileModel> treeTableView) {
                final TreeTableRow<FileModel> row = new TreeTableRow<>();
                final ContextMenu rowMenu = new ContextMenu();
                MenuItem removeItem = new MenuItem("Remove");
                removeItem.setOnAction(new EventHandler<ActionEvent>() {

                    @Override
                    public void handle(ActionEvent t) {
                        int currentPlaylistIndex = m_playlists.indexOf(row.getTreeItem().getParent().getValue());
                        boolean itemRemoved = false;
                        if (row.getItem().getClass().equals(Song.class)) {
                            itemRemoved = m_playlists.get(currentPlaylistIndex).getSongs().remove(row.getItem());
                            m_playlists.get(currentPlaylistIndex).updatePlaylist((Song) row.getItem());
                        } else if (row.getItem().getClass().equals(Playlist.class)) {
                            itemRemoved = m_playlists.remove(row.getTreeItem().getValue());
                        }
                        TreeItem<FileModel> treeItem = row.getTreeItem();
                        // may need to check treeItem.getParent() is not null:
                        treeItem.getParent().getChildren().remove(treeItem);
                        treeTblViewFiles.getSelectionModel().clearSelection();
                        if (MyApp.DEBUG) {
                            System.out.println(m_playlists.size());
                            if (currentPlaylistIndex > -1) {
                                System.out.println(m_playlists.get(currentPlaylistIndex).getSongs().size());
                            }
                        }
                    }
                });
                rowMenu.getItems().add(removeItem);
                row.contextMenuProperty().bind(Bindings.when(Bindings.isNotNull(row.itemProperty()))
                        .then(rowMenu)
                        .otherwise((ContextMenu) null));
                return row;
            }

        });

在我的 CSS 中我有:

/******************
 * ContextMenu
 ******************/
.context-menu{
        -fx-background-color: transparent;
}
.context-menu .menu-item{
    -fx-background-image: url("styles/cm_bg.png");
    -fx-background-repeat: no-repeat;
    -fx-background-position: center;
        -fx-background-color: transparent;
}
.context-menu .menu-item .label{
        -fx-text-fill: #ababab;
    -fx-font-weight: normal;
    -fx-font-size: 12pt;
}

问题是它不显示整个图像(220x40),只显示适合“删除”字符串的宽度。最右边的部分被剪掉了。

编辑: 简化版本(相同的结果适用于标签上的上下文菜单):

ContextMenu cm = new ContextMenu();
MenuItem mi = new MenuItem("Test");
cm.getItems().addAll(mi);
lblUploader.setContextMenu(cm);

为什么会这样,如何解决?

提前致谢。

最佳答案

使用以下 .css 解决了问题:

.context-menu {
    -fx-background-color: transparent;  
    -fx-min-width: <image_width>;
    -fx-min-height: <image_height>; 
}

请记住设置首选(或最小)尺寸。

关于css - JavaFX 8 Custom RowFactory ContextMenu 背景图像不完全可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134156/

相关文章:

javascript - 在 Bootstrap 中是否可以隐藏元素并用 Accordion 替换它们?

c# - 将可观察集合绑定(bind)到上下文菜单

wpf - 在 WPF 中自定义上下文菜单

jquery - 输入在 IE 上不起作用

css - Less 中基于变量的 Mixin 守卫

html - CSS - 居中图像和标题

java - 为什么在尝试将数据放入我的 JavaFX 散点图中时出现 IndexOutOfBoundsException?

java - 线程 "JavaFX Application Thread"java.lang.IllegalArgumentException : argument type mismatch 中的异常

java - 将 Spring 与 JavaFX Service 类集成会导致 Service 失败

android - 如何在 ListView 上长按传递变量?