2016-01-26 66 views
1

我正面臨一個奇怪的問題。我有一個可編輯的組合框與一些項目。運行我的代碼,如果我輸入一些東西到該組合框,並呼籲的getValue()之後函數,那麼它給了我值。JAVAFX可編輯組合框給出空值

這裏是我的代碼(新波士頓): 包應用程序;

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

    Stage window; 
    Scene scene; 
    Button button; 
    ComboBox<String> comboBox; 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     window = primaryStage; 
     window.setTitle("ComboBox Demo"); 
     button = new Button("Submit"); 

     comboBox = new ComboBox<>(); 
     comboBox.getItems().addAll(
       "Good Will Hunting", 
       "St. Vincent", 
       "Blackhat" 
     ); 

     comboBox.setPromptText("What is your favorite movie?"); 
     comboBox.setEditable(true); 
     button.setOnAction(e -> printMovie()); 

     //ComboBoxes also generate actions if you need to get value instantly 
     comboBox.setOnAction(e -> System.out.println("User selected " + comboBox.getValue())); 

     VBox layout = new VBox(10); 
     layout.setPadding(new Insets(20, 20, 20, 20)); 
     layout.getChildren().addAll(comboBox, button); 

     scene = new Scene(layout, 300, 250); 
     window.setScene(scene); 
     window.show(); 
    } 
    private void printMovie(){ 
     System.out.println(comboBox.getValue()); 
    } 
} 

我使用的是Windows 8.1,Eclipse的火星(4.5)和Java 1.8.0_66

+0

假設點擊提交按鈕,當你得到空,我關閉了一個問題,[HTTP ://stackoverflow.com/q/32620739/203657](重複) - 如果我的假設不正確,請編輯 – kleopatra

回答

6

據爲getValue()的文檔:

ComboBox的值被定義爲選擇如果 輸入不可編輯,或者它可編輯,則最近的用戶 操作:用戶輸入的值或上次選擇的項目。

的「用戶輸入值」將不會被getValue()直到用戶已經接受了它通常是鍵盤上的鍵Enter操作鍵的輸入文本返回。

因此,getValue()將返回下面的這些場景,併爲這一細節考慮預期正好表現:

  • 文本,「文本」,鍵入但不與操作鍵接受:

  • 文本,「文本」,鍵入到組合框,並接受了 操作鍵:文本

  • 下拉框項目,「心靈捕手」,選擇:心靈捕手

一旦用戶接受了操作鍵鍵入的文本,正確的值將被替代返回的空值。如果您想獲得鍵入到組合框的實際文本雖然,你可能會考慮獲取組合框編輯器的電流值,而不是:

comboBox.getEditor().getText(); 
+0

謝謝你回答。現在它工作完美。我想知道的一件事是,如果每次使用'getEditor()。getText()'檢出'getValue()',是否有任何問題? @ david-yee –

+0

除了影響用戶與應用程序交互方式的行爲細微差別之外,不應該有任何依賴編輯器文本值的問題。 –

+0

文檔中提到的「用戶操作」必須包括將焦點從組合中移出(f.i.,通過單擊提交按鈕),而不是這樣做的錯誤,修復爲jdk9,並且回溯到8u72 – kleopatra