再次显示JavaFX ChoiceBox ContextMenu并再次单击

时间:2017-06-23 08:09:49

标签: swing javafx

我在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);
    }
}

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

1 个答案:

答案 0 :(得分:1)

我认为此问题是由现有ChoiceBox bug in javafx引起的。 最简单的解决方法就是使用ComboBox代替:

ComboBox<String> choiceBox = new ComboBox<>(FXCollections.observableArrayList("item 1", "item 2"));