2016-03-25 19 views
0

Bu konuda hiçbir şey bulamadım - bu yüzden basit bir soru göndermek istedim. Genişletildiğinde alanların bir kombinasyonunu görüntüleyen özel bir ComboBox oluşturmak istiyorum. Aşağıdaki kod, listemi doğru şekilde görüntülüyor ve klavye oklarına tepki veriyor, ancak açılır menüden oku seçtiğimde, listenin seçim için fare tıklamasıyla bir tepkisi yok.Özel ComboBox fare ile seçilmiyor?

[DÜZENLEME] Ayrıca, bu konuda da çalışmaya devam edemiyorum.

Eksik olduğumdan emin değilim.

public class JavaFXApplication7 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     ComboBox<Person> cb = new ComboBox(); 
     cb.setCellFactory(column -> new ListCell<Person>() { 
      private HBox graphic = new HBox(); 
      private Label label1 = new Label() ; 
      private Label label2 = new Label(" || "); 
       private Label label3 = new Label();     
       { 
        graphic.getChildren().addAll(label1, label2, label3); 
       } 
      @Override 
      public void updateItem(Person person, boolean empty) { 
       if (person == null || empty) { 
        setGraphic(null); 
       } else { 
        label1.setText(person.firstName.get()); 
         label3.setText(person.email.get()); 
        setGraphic(graphic); 
       } 
      } 
     }); 

     ObservableList<Person> items = FXCollections.observableArrayList(); 
     Person p = new Person(); 
     p.email.set("[email protected]"); 
     p.firstName.set("Tony"); 
     p.lastName.set("Stark"); 
     p.phone.set("(555) 555-1212"); 

     items.add(p); 
     Person p2 = new Person(); 
     p2.email.set("[email protected]"); 
     p2.firstName.set("Bruce"); 
     p2.lastName.set("Wayne"); 
     p2.phone.set("(444) 444-1212"); 

     items.add(p2); 

     cb.setItems(items); 

     StackPane root = new StackPane(); 
     root.getChildren().add(cb);   
     Scene scene = new Scene(root, 300, 250); 
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

    public class Person { 
     StringProperty firstName = new SimpleStringProperty(); 
     StringProperty lastName = new SimpleStringProperty(); 
     StringProperty phone = new SimpleStringProperty(); 
     StringProperty email = new SimpleStringProperty(); 

     @Override 
     public String toString() { 
      return firstName.get() + " " + lastName.get(); 
     } 

    } 

} 

cevap

0

Sen updateItem yöntemde

super.updateItem(person, empty); 

kaçırıyorsun.