Swing JavaFX ChoiceBox上下文菜单在再次显示和单击时再次显示

Swing JavaFX ChoiceBox上下文菜单在再次显示和单击时再次显示,swing,javafx,Swing,Javafx,我在Swing应用程序中使用了带有ChoiceBox的JavaFX面板。ChoiceBox的标准行为是,当您第一次单击它时,将显示带有项目的弹出菜单;当您第二次单击ChoiceBox时,弹出菜单将隐藏。但当您将其放入Swing应用程序时,第二次单击会导致弹出窗口隐藏并立即再次显示。我如何防止这种行为 public class ComboTest { private static void initAndShowGUI() { JFrame frame = new JFr

我在Swing应用程序中使用了带有ChoiceBox的JavaFX面板。ChoiceBox的标准行为是,当您第一次单击它时,将显示带有项目的弹出菜单;当您第二次单击ChoiceBox时,弹出菜单将隐藏。但当您将其放入Swing应用程序时,第二次单击会导致弹出窗口隐藏并立即再次显示。我如何防止这种行为

public class ComboTest {

    private static void initAndShowGUI() {
        JFrame frame = new JFrame("FX");
        final JFXPanel fxPanel = new JFXPanel();
        fxPanel.setPreferredSize(new Dimension(100, 100));
        frame.add(fxPanel);
        frame.pack();
        frame.setVisible(true);

        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
            }
        });
    }

    private static void initFX(JFXPanel fxPanel) {
        // This method is invoked on JavaFX thread
        Scene scene = createScene();
        fxPanel.setScene(scene);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }

    private static Scene createScene() {
        ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList("item 1", "item 2"));
        VBox vbox = new VBox(choiceBox);
        return new Scene(vbox);
    }
}

我怀疑,当我第二次单击choicebox时,弹出窗口会失去焦点,导致其隐藏,然后choicebox会处理鼠标单击并再次显示弹出窗口。

我认为此问题是由现有的
choicebox
造成的。 最简单的修复方法是使用:

ComboBox choiceBox=新的ComboBox(FXCollections.observableArrayList(“项目1”、“项目2”);
ComboBox<String> choiceBox = new ComboBox<>(FXCollections.observableArrayList("item 1", "item 2"));