2016-10-05 102 views
0

這個問題起初似乎很簡單,但我已經有幾天的麻煩了。檢測鼠標點擊選擇可編輯組合框JavaFX

所以,我的問題是,我想檢測鼠標點擊和選擇打開組合框選擇時,並單擊鼠標選擇選項。

那麼,什麼是應該做的是檢測在選擇鼠標點擊並同時獲得所選擇的價值,以及:

enter image description here

PS:我的組合框的代碼可以在這裏看到: Select JavaFX Editable Combobox text on click

隨時提出其他問題。

回答

2

只需使用一個電池工廠,並註冊與細胞的處理程序:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.ListCell; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class ComboBoxMouseClickOnCell extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     ComboBox<String> combo = new ComboBox<>(); 
     combo.getItems().addAll("One", "Two", "Three"); 
     combo.setCellFactory(lv -> { 
      ListCell<String> cell = new ListCell<String>() { 
       @Override 
       protected void updateItem(String item, boolean empty) { 
        super.updateItem(item, empty); 
        setText(empty ? null : item); 
       } 
      }; 
      cell.setOnMousePressed(e -> { 
       if (! cell.isEmpty()) { 
        System.out.println("Click on "+cell.getItem()); 
       } 
      }); 
      return cell ; 
     }); 

     Scene scene = new Scene(new StackPane(combo), 300, 180); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

我得到的Lambda表達式不會在該語言級別的錯誤的支持。 –

+0

@EerikMuuli然後配置您的IDE,以便使用Java 8,或將lambda表達式轉換爲類。 –

+0

謝謝!它非常完美! –