【发布时间】:2015-11-18 20:38:03
【问题描述】:
我正在使用 Javafx v8.0.25-b18。
我遇到的问题是动态组合框的下拉列表的大小没有改变,所以如果我最初在下拉列表中有两个项目,那么下拉列表的大小将适合两个项目,但是如果我现在填充包含三个项目的动态组合框然后我在里面得到一个小滚动条!?,如果我删除一个项目 - 我将在组合框中有一个空白空间!?
每次我将值放入其中时,我都想“重置”下拉列表的大小,因此每次在运行时填充它时它都会是正确的大小。
为了更清楚,我添加了三张图片:
1. 第一张截图显示初始下拉大小为 2
- 第二个屏幕截图显示了相同的组合框,现在在运行时我添加了 2 个值,我希望它现在有一个大小为 4 的下拉列表,但下拉列表大小保持为 2 并且只添加了一个不需要的滚动条李>
- 最后一个屏幕截图是当我删除项目并且只有一个项目保留在组合框中时,我希望看到一个下拉菜单,但不幸的是我看到一个大小为 2 的下拉菜单,因此是一个空白空间而不是第二个项目
我正在添加简单的代码来创建这个场景,我要感谢@Gikkman 帮助我们走到了这一步,代码实际上是他的!
public class Test extends Application {
private int index = 0;
@Override
public void start(Stage primaryStage) throws IOException {
VBox vbox = new VBox();
vbox.setSpacing(10);
vbox.setAlignment(Pos.CENTER);
final ComboBox<String> box = new ComboBox<>();
box.setPrefWidth(200);
box.setVisibleRowCount(10);
Button add = new Button("Add");
Button remove = new Button("Remove");
add.setOnAction( new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
box.getItems().add("Item " + index++);
box.getItems().add("Item " + index++);
}
});
remove.setOnAction( new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if( index > 0 )
box.getItems().remove(--index);
}
});
vbox.getChildren().addAll(add, remove, box);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
【问题讨论】:
-
请提供MVCE。
-
用谷歌搜索但不明白 MVCE 代表什么。你能详细说明一下吗?
-
好的,现在我有一个很好的 MVCE
-
我无法观察您描述的场景。添加和删除项目会按预期显示下拉列表。如果项目大小超过 10,则会出现滚动条,这是因为 VisibleRowCount 的默认值为 10。即使您说您正在重用 JavaFX 2,您附加的屏幕截图来自 JavaFX 8 引入的 modena 样式。检查System.out.println( com.sun.javafx.runtime.VersionInfo.getRuntimeVersion() ) 的确切版本。
-
对不起,你是对的,版本是:8.0.25-b18,我现在去把原帖里的版本改一下。您描述的行为是我想要的,但是使用我在帖子中输入的确切代码,我得到了我描述的行为,如果是版本问题,我不介意升级,谢谢 Uluk