2013-10-16 5 views
3

Je suis assez nouveau pour JavaFX, et j'ai juste essayé les bindigs de propriétés. Cela a bien fonctionné avec StringProperty et BooleanProperty, mais maintenant je dois lier certaines données à un ComboBox.JavaFX ComboBox itemsProperty binding

Ceci est la ligne, où il meurt. Il est dans une classe de contrôleur pour un FXML:

comboBox.itemsProperty().bind(root.itemsProperty()); 

Voici la classe de racine:

import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.collections.ObservableList; 

public class SectionComboBox extends SectionControl{ 

    private final ObjectProperty<ObservableList> items = new SimpleObjectProperty<>(); 
    } 

    public ObservableList getItems() { 
     return items.get(); 
    } 

    public void setItems(ObservableList value) { 
     items.set(value); 
    } 

    public ObjectProperty itemsProperty() { 
     return items; 
    } 
} 

Le journal des erreurs:

java.lang.NullPointerException 
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getIndexOfComboBoxValueInItemsList(ComboBoxListViewSkin.java:430) 
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.updateDisplayNode(ComboBoxListViewSkin.java:376) 
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getDisplayNode(ComboBoxListViewSkin.java:232) 
at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.updateDisplayArea(ComboBoxBaseSkin.java:125) 
at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.computePrefHeight(ComboBoxBaseSkin.java:180) 
at javafx.scene.Parent.prefHeight(Parent.java:879) 
at javafx.scene.layout.Region.prefHeight(Region.java:1384) 
at javafx.scene.control.Control.computePrefHeight(Control.java:856) 
at javafx.scene.Parent.prefHeight(Parent.java:879) 
at javafx.scene.control.Control.prefHeight(Control.java:738) 
at javafx.scene.layout.Region.computeChildPrefAreaHeight(Region.java:1599) 
at javafx.scene.layout.AnchorPane.computeChildHeight(AnchorPane.java:296) 
at javafx.scene.layout.AnchorPane.layoutChildren(AnchorPane.java:327) 
at javafx.scene.Parent.layout(Parent.java:1018) 
at javafx.scene.Parent.layout(Parent.java:1028) 
at javafx.scene.Parent.layout(Parent.java:1028) 
at javafx.scene.Parent.layout(Parent.java:1028) 
at javafx.scene.Parent.layout(Parent.java:1028) 
at javafx.scene.Scene.layoutDirtyRoots(Scene.java:516) 
at javafx.scene.Scene.doLayoutPass(Scene.java:487) 
at javafx.scene.Scene.access$3900(Scene.java:170) 
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2186) 
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:363) 
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:461) 
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:330) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17) 
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67) 
at java.lang.Thread.run(Thread.java:724) 

quelqu'un peut me aider comment puis-je lier Correctement, qu'est-ce que j'ai raté?

Répondre

3

Je l'ai compris, depuis hier. Le seul problème était, que j'ai oublié d'initialiser le ObservableList avant de le lier à la ComboBox. Donc, c'est la ligne manquante, fmo le tout début:

root.setItems(FXCollections.observableArrayList()); 
Questions connexes