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

JavaFX 组合框项目在选择时被清除 [重复]

容远
2023-03-14

我有一个奇怪的问题。我在JavaFX中使用了一个ComboBox,其中每一项都是一个HBox,是一个图像和一个标签的组合。

list.forEach(continent -> {
    Image image = new Image(getClass().getResourceAsStream(continent + ".png"));
    ImageView imageView = new ImageView(image);
    imageView.setFitHeight(25);
    imageView.setFitWidth(25);
    imageCombo.getItems().add(new HBox(imageView, new Label(continent)));
 });

list是字符串的数组列表。ImageCombo只是一个ComboBox

直到这里没有问题。但是,当我选择其中一个项目时,问题就来了。当我这样做时,它会被选中,但是当我再次展开组合框列表时,先前选择的项目变为空白,如果我选择该项目,它也将不可见。我尝试使用细胞工厂,似乎对我没有多大帮助。以下是例如选择欧洲和非洲后问题的外观。请注意,非洲显示为当前选定的项目,因为这是最后选择的值。


共有1个答案

张昊穹
2023-03-14
匿名用户

正如评论中指出的那样:API 文档不建议将 Node 插入到 Combobox 的项目。

您的< code>ComboBox只能存储< code>String值:

ComboBox<String> comboBox = new ComboBox<>();
comboBox.setItems(FXCollections.observableArrayList("asia", "europe", "america"));

然后您可以编写一个<code>ListCell</code>实现,如:

class MyListCell extends ListCell<String> {
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (item == null || empty)
            setGraphic(null);
        else {
            Image image = new Image(getClass().getResourceAsStream(item + ".png"));
            ImageView imageView = new ImageView(image);
            imageView.setFitHeight(25);
            imageView.setFitWidth(25);
            setGraphic(new HBox(imageView, new Label(item)));
        }

        setText("");
    }

}

然后使用此实现在下拉列表中显示HBoxes:

comboBox.setCellFactory(param -> new MyListCell());

并在< code>ComboBox本身上显示:

comboBox.setButtonCell(new MyListCell());

注意:通常,ComboBox 不应存储字符串值,而应存储表示大陆的类的实例,例如封装大陆名称和图像路径的 Continent

 类似资料:
  • 我创建了一个 (JavaFX) 组合框,我正在填充一个由 HBoxes 制成的可观察列表,以便我可以在每个列表单元格中显示带有一些文本的图像。 这显示得很好,除了每当您选择列表中的一个项目时,它都会消失。一旦您选择了每个项目,它根本不会呈现任何项目。(您仍然可以通过单击它们之前所在的空间来选择它们。 你知道我该怎么纠正吗? 我的部分代码显示如下: 提前感谢您的帮助!

  • 问题内容: 我们正在使用Selenium WebDriver和JBehave在我们的Web应用程序上运行“集成”测试。我有一种方法,可以在表单输入中输入一个值。 但是,当我尝试使用它在下拉列表中选择一个项目时,它(毫无疑问)失败了 java.lang.UnsupportedOperationException:您只能设置作为输入元素的元素的值 如何在组合中选择一个值? 问题答案: 这是怎么做的:

  • 我在后台有< code>ViewModel(实现< code > INotifyPropertyChanged )和类< code>Category,它只有一个< code>string类型的属性。我的ComboBox SelectedItem绑定到类别的实例。当我更改instance的值时,SelectedItem没有更新,Combobox也没有更改。 编辑:代码 组合框: 物业: 我尝试的是:

  • 我需要在加载时选择组合框的第一个项目。 XAML: 我希望在打开窗口时在组合框中最初选择。 我使用< code>SelectedItem属性在所选项目发生更改时触发一个事件。

  • 我目前正在创建一个工具来为不同的事件提交报告。 在第一步中,用户选择通话中的每个人(我们有一个26人的团队)。在下一步中,将每个选定的人写入6个不同的组合框中,以便用户可以选择每辆车的驾驶员和指挥官(3辆车-每辆车上的指挥官和驾驶员,因此有6个组合框)。 我的问题是:我需要防止在每辆车上都选择同一个人作为驾驶员,或者同时作为驾驶员和指挥官。因此,我尝试通过ChangeListener从其他组合框中

  • 所以,我有一个奇怪的问题,我从组合框列表中选择一个项目,为了填充第二个组合框,我必须首先从第一个组合框中再次选择单词,而不是从项目列表中,而是单词本身。只有这样,代码才会注册我选择了该项目。我拥有的代码是简单的$variable.SelectedItem。参见下面的代码; 我想做的就是从下拉列表中选择位置“医院”,然后第二个名为“$ComboBox_Printer”的组合框填充我服务器中的打印机名