当前位置: 首页 > 知识库问答 >
问题:

JavaFX:具有图像和文本的ChoiceBox

石苏燕
2023-03-14

我想创建一个带有JavaFX ChoiceBox的下拉菜单,其中每个条目由一个不同的图标组成,旁边有一个简短的文本。(例如,在语言选择器中,左边有一个小标志,右边有语言名称。)

做这件事最好的方法是什么?

我试着通过CSS来做。下面的几乎管用,但当然它会为所有条目设置相同的图标:

#accChoiceBox .menu-item .label {
    -fx-padding: 0 0 0 30px;
    -fx-background-size: 20px 20px;
    -fx-background-repeat: no-repeat;
    -fx-background-image: url("../resources/images/icon.png");
}

所以我想我可以通过#accchoiceBox.menu-item:nth-of-type(1).label或类似的方式为每个条目赋予自己的图标,但是我尝试的选择器都没有起作用。

共有1个答案

阮健
2023-03-14

好的,通过简单地使用一个组合框而不是一个ChoiceBox解决了这个问题(谢谢,James_D)。web上有很多关于组合框中的图像的例子和解决方案。不管怎样,我也会把我自己的留在这里。

它将简单地给出组合框中的第一个条目icon_1.png,第二个条目icon_2.png,依此类推。

comboBox.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
    @Override
    public ListCell<String> call(ListView<String> p) {
        return new ListCell<String>() {
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(item);
                if (item == null || empty) {
                    setGraphic(null);
                } else {
                    Image icon;
                    try {
                        int iconNumber = this.getIndex() + 1;
                        String iconPath = "MyProject/resources/images/icon_" + iconNumber + ".png";
                        icon = new Image(getClass().getClassLoader().getResourceAsStream(iconPath));
                    } catch(NullPointerException ex) {
                        // in case the above image doesn't exist, use a default one
                        String iconPath = "MyProject/resources/images/icon_na.png";
                        icon = new Image(getClass().getClassLoader().getResourceAsStream(iconPath));
                    }
                    ImageView iconImageView = new ImageView(icon);
                    iconImageView.setFitHeight(30);
                    iconImageView.setPreserveRatio(true);
                    setGraphic(iconImageView);
                }
            }
        };
    }
});
 类似资料:
  • **编辑:我已经能够以文本和图像居中的div,但我希望div的背景是全宽的。我无法使背景和文本与车身中心对齐的徽标和全宽div(响应性) **编辑2:这就是我试图实现的目标:在此处输入图像描述 我已经试着把div放在logo的div里面,因为它已经在中间了 片段: 我想要两个标志和div与文本在身体的中心。在标志下放置div。

  • 我想包括使用FXML的图标和文本按钮。 我知道在FXML中,我可以用以下代码添加图像: 但我想知道如何将其与按钮代码合并:

  • 问题内容: 在您的SQL数据库中存储大量文本(例如html页面)是个好主意吗?还是将其作为html文件存储在文件系统中是一个更好的主意? 图像也是如此-将图像数据存储在数据库中还是将其放置在磁盘上更好? 例如,存储大量数据会导致我出现性能问题吗?每种存储方法的优缺点是什么? 就数据的大小而言,在这种情况下,我正在寻找HTML和图像的“几页”区域,这些图像和图像的大小小于500kb(不过可能要小得多

  • 我试图使用APACHE POI创建一个段落,其中包含左边的图像和右边的一些文本。有什么方法可以设置这两个组件之间的对齐方式吗? 下面是在表中执行我想要的操作的代码,但它也呈现了这两个段落。 提前谢谢你。

  • 基本上我的问题分为两部分。 > 我想知道将要操纵像素并将特定颜色转换为透明像素的首选/快速方法。 我想知道我是否能够使用这个“BuffereImage”,而不必将其保存为支持“png”等透明度的文件格式 我找到了一种设置单个像素的方法 这儿呢 正如它所提到的,这是一种“缓慢的方法” 我发现这个线程Java:用透明像素填充BufferedImage 哪一条评论提到了“int[]”和操纵像素。 本质上

  • 请帮我做这件事。我已经尝试了很多东西,甚至这里的反应如何显示图像上的文本,但没有得到所需的输出,如该页面的第一个图像所示。我试图用文本覆盖显示图像。我得到了一个用惰性适配器加载图像的代码。但是显示的图像在两侧都被填充。这是我得到的 这是我的代码: 平铺布局xml 网格布局 我正在给瓷砖充气