Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法动态更改ComboBox中的可见行_Java_Dynamic_Drop Down Menu_Javafx_Combobox - Fatal编程技术网

Java 有没有办法动态更改ComboBox中的可见行

Java 有没有办法动态更改ComboBox中的可见行,java,dynamic,drop-down-menu,javafx,combobox,Java,Dynamic,Drop Down Menu,Javafx,Combobox,考虑以下MCVE: import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.stage.Stage; public class MCVE extends

考虑以下MCVE:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class MCVE extends Application {

    @Override
    public void start(Stage stage) {

        ComboBox<String> box = new ComboBox<String>();
        box.setEditable(true);

        ObservableList<String> list = FXCollections.observableArrayList();
        box.setItems(list);

        box.getEditor().textProperty().addListener((obs, oldValue, newValue) -> {
            // Clear the list
            list.clear();
            int rows = 0;

            // Add a dummy item to the list for every character i newValue.
            for (int i = 0; i < newValue.length() && newValue.length() < 10; i++) {
                list.add(i+"");
                rows++;
            }

            // Does not work.
            box.setVisibleRowCount(rows);
        });

        stage.setScene(new Scene(box));
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
} 
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.stage.stage;
公共类MCVE扩展应用程序{
@凌驾
公众假期开始(阶段){
ComboBox=新的ComboBox();
box.setEditable(true);
ObservableList=FXCollections.observableArrayList();
框。设置项目(列表);
box.getEditor().textProperty().addListener((obs、oldValue、newValue)->{
//清除列表
list.clear();
int行=0;
//为每个字符i newValue向列表中添加一个虚拟项。
对于(int i=0;i
当您向组合框添加一些字符时,列表中的项目数量会增加。但是下拉列表中可见行的数量不会改变。要更改此设置,您需要隐藏并显示下拉列表。当列表中的项目数量减少时,也会出现此问题

在我看来,这应该是动态变化的

这似乎涵盖了一个类似的问题。尽管在这种情况下,当下拉列表隐藏后显示时,问题仍然存在,但在我的示例中并非如此

这提出了一个类似的问题,除了问题是为什么隐藏后显示下拉列表时,
setVisibleRowCount()
不起作用。我的问题是如何在显示下拉列表时实际完成动态变化的行计数。我还尝试了上面链接的线程中提供的修复,既设置了
组合框
列表单元格的单元格大小,又设置了另一个visibleRowCount,然后将其设置为触发更新的实际值。两者似乎都不起作用

一种可能的修复方法是,只要更改列表大小,就隐藏并显示下拉列表,但这会导致下拉列表闪烁,这很烦人

该列表可能会保留某种允许的最大可见行数,就像默认实现一样

测试环境:Windows8.1Enterprise,Java8U74