JavaFX - Combobox向下扩展屏幕(Post 8u60)

时间:2017-07-20 06:25:32

标签: javafx

我认为这个bug应该很久以前就已经修好了......但是当我把一个ComboBox放在窗口底部附近时,它会向下扩展并离开屏幕。我认为这样做的原因是因为它上面还有其他控件,所以不要“碰撞”它们而是向下扩展。为什么组合框不会将扩展到布局的其余部分? 我所知道的是,当我在它上方添加一些填充时,它会向上扩展而不是向下扩展。

示例:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        ObservableList<String> choiceList = FXCollections.observableArrayList();
        choiceList.addAll("Choice1", "Choice2", "Choice3", "Choice4");
        ComboBox<String> choices = new ComboBox<>(choiceList);
        choices.setMinWidth(100);

        Button button1 = new Button("First Button");
        button1.setMinWidth(150);
        Button button2 = new Button("Second Button");
        button2.setMinWidth(150);

        VBox layout = new VBox(10);
        layout.setPadding(new Insets(10, 10, 10, 10));
        layout.getChildren().addAll(button1, button2, choices);

        Scene scene = new Scene(layout);

        primaryStage.setScene(scene);
        primaryStage.setTitle("Example");
        primaryStage.show();
    }


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

Image of window displayed by the above code

有人为此解决了问题吗?

1 个答案:

答案 0 :(得分:0)

注意,如果在你的情况下,你正在将你的主应用程序窗口移动到屏幕的底部,并且组合框仍在下降并被切断以便弹出窗口的某些内容不可见,那么很可能是个bug。但我的猜测是,如果这就是讨价还价,那就是系统特定的问题,因为我无法在OS X上复制这样的问题。如果是这种情况,请尝试Java 9早期访问版本,看看问题是否仍然存在复制,如果是,您可以提交bug report

这不是错误,而是设计。

ComboBox弹出窗口在内部实现为PopupControl。 PopupControl是一个新窗口,它不会被限制在其父窗口(主阶段)的范围内。 JavaFX具有逻辑,可确保在可见屏幕区域内显示诸如ContextMenus和ComboBox弹出窗口的弹出窗口,而不是拥有的舞台区域。

如果您将主应用程序移动到屏幕顶部,然后打开组合框弹出窗口,弹出窗口将下拉,因为屏幕上有空间显示它。但是如果你将主应用程序移动到屏幕的底部,然后打开组合框弹出窗口,弹出窗口就会掉线(我不知道更好的方法来解释这个概念;-)因为没有空间如果它要下拉,则显示弹出窗口。

放下样品。通过在OS X上运行示例代码创建,将主应用程序窗口移动到屏幕底部附近并打开组合框弹出窗口。

enter image description here