【问题标题】:JavaFX ChoiceBox ContextMenu shown again when it is displayed and clicked againJavaFX ChoiceBox ContextMenu 在显示并再次单击时再次显示
【发布时间】:2017-06-23 08:09:49
【问题描述】:

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

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

【问题讨论】:

    标签: swing javafx


    【解决方案1】:

    相信这个问题是由现有的ChoiceBoxbug in javafx引起的。 最简单的解决方法是改用ComboBox

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

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      相关资源
      最近更新 更多