我认为这个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
有人为此解决了问题吗?
答案 0 :(得分:0)
注意,如果在你的情况下,你正在将你的主应用程序窗口移动到屏幕的底部,并且组合框仍在下降并被切断以便弹出窗口的某些内容不可见,那么很可能是个bug。但我的猜测是,如果这就是讨价还价,那就是系统特定的问题,因为我无法在OS X上复制这样的问题。如果是这种情况,请尝试Java 9早期访问版本,看看问题是否仍然存在复制,如果是,您可以提交bug report。
这不是错误,而是设计。
ComboBox弹出窗口在内部实现为PopupControl。 PopupControl是一个新窗口,它不会被限制在其父窗口(主阶段)的范围内。 JavaFX具有逻辑,可确保在可见屏幕区域内显示诸如ContextMenus和ComboBox弹出窗口的弹出窗口,而不是拥有的舞台区域。
如果您将主应用程序移动到屏幕顶部,然后打开组合框弹出窗口,弹出窗口将下拉,因为屏幕上有空间显示它。但是如果你将主应用程序移动到屏幕的底部,然后打开组合框弹出窗口,弹出窗口就会掉线(我不知道更好的方法来解释这个概念;-)因为没有空间如果它要下拉,则显示弹出窗口。
放下样品。通过在OS X上运行示例代码创建,将主应用程序窗口移动到屏幕底部附近并打开组合框弹出窗口。