You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FXML initialize方法中ComboBox选中值后弹窗无法关闭的问题

JavaFX ComboBox初始化时选中值后弹出面板无法隐藏的异常

问题现象

在带有@FXML注解的initialize方法中直接设置ComboBox的选中值时,控件的下拉弹出面板不会自动隐藏,具体表现如下:
ComboBox异常表现

示例代码

Main类

public class Main  extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Button test = new Button("Test");
        test.setOnAction(event -> {
            TestDialog dialog = new TestDialog(stage);
            dialog.show();
        });

        HBox hBox = new HBox(test);
        stage.setScene(new Scene(hBox, 300, 50));
        stage.show();
    }

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

TestDialog类

public class TestDialog extends Dialog<ButtonType> {

    @FXML
    private ComboBox<Integer> baudRateComboBox;

    public TestDialog(Window owner) {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("/com/sample/dialogpane.fxml"));
            loader.setController(this);

            initOwner(owner);
            initModality(Modality.APPLICATION_MODAL);

            setDialogPane(loader.load());
        }
        catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @FXML
    private void initialize() {
        baudRateComboBox.getItems().setAll(4800, 9600, 19200, 38400, 57600, 115200);

        baudRateComboBox.getSelectionModel().select((Integer) 115200);
    }
}

FXML文件

<DialogPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">

    <content>
        <HBox spacing="5" alignment="BASELINE_LEFT">
            <Label text="Baudrate:"/>
            <ComboBox fx:id="baudRateComboBox"/>
        </HBox>
    </content>

    <buttonTypes>
        <ButtonType text="Затвори" buttonData="CANCEL_CLOSE"/>
    </buttonTypes>

</DialogPane>

解决方案

将设置选中值的操作放入Platform.runLater中异步执行,即可解决弹出面板无法隐藏的问题:

@FXML
private void initialize() {
    baudRateComboBox.getItems().setAll(4800, 9600, 19200, 38400, 57600, 115200);

    Platform.runLater(() -> baudRateComboBox.getSelectionModel().select((Integer) 115200));
}

环境信息

  • 系统:Ubuntu
  • JDK版本:18.0.1.1
  • JavaFX版本:19

内容的提问来源于stack exchange,提问作者mr mcwolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:21:02