我有一個ChoiceBox
我想要顯示下拉菜單,如果它在獲取焦點時通過輸入控件(焦點遍歷)循環播放。即我不希望用戶先按SPACE,因爲他必須做出選擇。我有以下代碼至今:JavaFX:在焦點時自動展開ChoiceBox
import java.util.Arrays;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class SampleApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
GridPane pane = new GridPane();
ChoiceBox<String> box1 = new ChoiceBox<String>();
box1.getItems().addAll("1", "2", "3");
ChoiceBox<String> box2 = new ChoiceBox<String>();
box2.getItems().addAll("a", "b", "c");
for (ChoiceBox<String> choiceBox : Arrays.asList(box1, box2)) {
choiceBox.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue && !oldValue) {
// transition from unfocused to focused -> expand choicebox
if (!choiceBox.isShowing()) {
choiceBox.show();
}
}
});
}
pane.add(box1, 0, 0);
pane.add(box2, 1, 0);
root.getChildren().add(pane);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
此代碼工作正常,當我使用鍵盤焦點遍歷,但如果我點擊了(聚焦)ChoiceBox
用鼠標,在下拉菜單可顯示幾毫秒和然後再次隱藏。我猜ChoiceBox
有一個預定義的EventHandler
鼠標事件「切換」是否顯示的項目。顯然,FocusedProperty
首先會更改,顯示的項目,然後MouseEvents
再次隱藏它們。
我該如何解決這個問題?
爲什麼我得到這個問題的贊成票? –
好吧,我添加了SSCCE,看到編輯問題 –