我是JavaFX的新手,所以這可能是一個微不足道的問題。在對話框中有一個ListView,用於顯示用戶何時單擊菜單按鈕。問題是,當對話框顯示時,ListView中的第一項已被選中。我有listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<NewChoices>())
作爲用戶選擇一個項目時的監聽器,但由於第一個項目已被選中,所以當我點擊第一個項目時什麼也沒有發生。我需要找到一種方法來確保在對話框顯示時沒有選擇任何項目。在顯示對話框之前,我嘗試使用listView.getSelectionModel().clearSelection()
,但是如果程序丟失,然後重新獲得焦點,則第一個項目再次被選中而不被點擊。我怎樣才能預先選擇第一個項目或任何項目?如何防止預先選擇JavaFX ListView?
下面是代碼:
Pane rootPane = new Pane();
ObservableList<NewChoices> listChoices = FXCollections.observableArrayList(NewChoices.values());
ListView<NewChoices> listView = new ListView<NewChoices>();
listView.setItems(listChoices);
rootPane.getChildren().add(listView);
Stage newDialog = new Stage(StageStyle.UTILITY);
newDialog.initModality(Modality.APPLICATION_MODAL);
newDialog.setTitle("New");
Scene newDialogScene = new Scene(rootPane);
newDialog.setScene(newDialogScene);
newDialog.show();
你用什麼API來顯示對話框? JDK8_40? ControlsFX?自定義場景?除了該對話框上的列表,還有其他控件嗎? – 2014-10-31 22:01:59
我正在使用JDK8_24。我現在遠離我的電腦,所以我不記得確切的一個,但它是JDK8_2的東西。不,它只是對話框中的列表視圖。 – user2793426 2014-10-31 22:46:32
由於在8u40之前還沒有對話框,我認爲你所謂的對話只是一個普通的場景。如果你只有一個列表(沒有按鈕來關閉所謂的對話框?),我的猜測是當場景獲得焦點時,因爲唯一的可聚焦節點是列表,所以它的第一個項目被選中。添加一些確定/取消按鈕可能會有所幫助,因爲它們可以獲得焦點。也許你可以添加一個[MCVE](http://stackoverflow.com/help/mcve)。 – 2014-10-31 23:01:44