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

如何删除可编辑组合框中输入的选择

堵才哲
2023-03-14

是的,有关于这个问题的早期线索和指南。他们告诉我答案应该是setValue(null)getSseltionModel(). clear选择()。但是做任何这些都会给我一个java.lang.IndexOutOfBoundsExc0019

我想做的是每次将某样东西写入组合框时清除所选内容。这是因为当你在组合框中写了一些东西,而在组合框弹出窗口中仍然选择了其他东西时,它会导致问题和看起来很奇怪。

这是一个SSCCE:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.HBox;

import javafx.stage.Stage;
import javafx.util.converter.IntegerStringConverter;

public class SSCCE extends Application {

    @Override
    public void start(Stage stage) {

        HBox root = new HBox();

        ComboBox<Integer> cb = new ComboBox<Integer>();
        cb.setEditable(true);
        cb.getItems().addAll(1, 2, 6, 7, 9);
        cb.setConverter(new IntegerStringConverter());

        cb.getEditor().textProperty()
                .addListener((obs, oldValue, newValue) -> {
                    // Using any of these will give me a IndexOutOfBoundsException
                    // Using any of these will give me a IndexOutOfBoundsException
                    //cb.setValue(null);
                    //cb.getSelectionModel().clearSelection();
                    });

        root.getChildren().addAll(cb);

        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

共有1个答案

阎昌勋
2023-03-14

您正在运行此JavaFX组合框更改值导致IndexOutOfBoundsException问题,这将导致IndexOutOfBoundsException。这是一种痛苦。

无论如何,您的尝试都有一个逻辑问题:清除所选值将导致编辑器更新其文本,因此即使这样做有效,用户也无法键入。因此,您需要检查更改的值是否不是键入的值。这似乎解决了两个问题:

    cb.getEditor().textProperty()
            .addListener((obs, oldValue, newValue) -> {
                if (cb.getValue() != null && ! cb.getValue().toString().equals(newValue)) {
                    cb.getSelectionModel().clearSelection();
                }
            });

您可能需要更改toString()调用,具体取决于您使用的转换器。在这种情况下,它将起作用。

 类似资料:
  • 我正在尝试使用一个可编辑的组合框。因为我想添加一个用于按回车键的监听器。我尝试了下面的选项,但都不起作用。:( < code>cmb_year是组合框对象。

  • 我在react中的多个输入中添加了动态值,然后尝试对其进行编辑,但它根本不可编辑。代码如下: 我没有使用defaultValue属性,并且添加了onChange事件,但它不起作用!

  • 我有两个组合框。我正在填充这样的两个组合框。组合框1和2的名称是cmbpartyName和cmbprefPT2。 在这里,我从combox1中选择一个值,在它所选的索引更改事件中,如下所示。 由于两个组合框具有相同的值,如何从第二个组合框cmbPrefPT2中删除第一个组合框的选定值?

  • 我有JavaFX控件,可以与许多潜在冲突的值相关联。 当控件是时,我使用属性将字符串放入并使用此处描述的技巧来确保在用户键入该字段之前保持可见。这工作得很好。 现在,我想对<code>组合框</code>做同样的事情,但我发现只有当<code>editable</code>属性设置为<code>true</code>时,<code>组合盒</code>才会显示<code>PrompText</co

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

  • 问题内容: 我有一个将联系人对象存储为状态的组件-{firstName:“ John”,lastName:“ Doe”,电话:“ 1234567890}我想创建一个表单来编辑此对象,但是如果我希望输入保留值对于原始的接触参数,我需要使每个输入成为受控组件,但是,由于状态仅保留{contact:{…}},因此我不知道如何创建一个可以适应每个参数的handleChange函数。以下是我目前拥有的- 我