gpt4 book ai didi

JavaFX 从 ChoiceDialog 获取 ComboBox

转载 作者:行者123 更新时间:2023-11-30 07:22:44 28 4
gpt4 key购买 nike

我的 JavaFX 项目中有一个 javafx.scene.control.ChoiceDialog 对象。当对话框打开时,我想将焦点设置到底层的ComboBox。但是,我不知道如何获取底层的 ComboBox 控件。对于 TextInputDialog,有一个名为 getEditor() 的方法。有没有什么方法(除了反射性访问私有(private) comboBox 成员之外)来获取底层 ComboBox

最佳答案

要将焦点设置到 ComboBox,您可以使用肮脏的 hack,它会在显示 ChoiceDialog 后触发 updateGrid:

ChoiceDialog<String> choiceDialog = new ChoiceDialog<>("test", getData());
choiceDialog.showingProperty().addListener((ov, b, b1) -> {
if (b1) {
choiceDialog.setContentText("");
}else {
choiceDialog.setContentText(null);
}

//or
if (b1) {
Node comboBox = choiceDialog.getDialogPane().lookup(".combo-box");
comboBox.requestFocus();
}
});
<小时/>

使用样式类获取 ComboBox 实例对于覆盖默认键盘导航非常有用:

final var options = (ComboBox) getDialogPane().lookup( ".combo-box" );
options.setOnKeyPressed( ( event ) -> {
// When the user presses the down arrow, open the drop-down. This prevents
// navigating to the cancel button.
if( event.getCode() == KeyCode.DOWN && !options.isShowing() ) {
options.show();
event.consume();
}
} );

当上述更改到位时,按向下箭头键将打开组合框实例,而不是导航到“取消”按钮。

关于JavaFX 从 ChoiceDialog 获取 ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279640/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com