我在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);
}
}
我怀疑当我第二次点击选择框时弹出窗口失去焦点会导致它隐藏,然后选择框会处理鼠标点击并再次显示弹出窗口。
答案 0 :(得分:1)
我认为此问题是由现有ChoiceBox
bug in javafx引起的。
最简单的解决方法就是使用ComboBox
代替:
ComboBox<String> choiceBox = new ComboBox<>(FXCollections.observableArrayList("item 1", "item 2"));