2017-06-05 50 views
1

我已经尝试了一切,找出为什么我的组合框不会填充,但没有任何作品。Java组合框将不会被填充

在我的FXML文件中。

<ComboBox fx:id="comboBox" layoutX="162.0" layoutY="15.0" prefHeight="25.0" prefWidth="334.0" promptText="Select past popular pizza" /> 

在我的控制,我有以下

public class ServeController { 
public ObservableList<String> pizzas1 = FXCollections.observableArrayList(); 
@FXML public ComboBox<String> comboBox; 
private void initialize() { 
comboBox.getItems().addAll(
     "[email protected]", 
     "[email protected]", 
     "[email protected]", 
     "[email protected]", 
     "[email protected]" 
    ); 
} 

我甚至有

public ObservableList<String> pizzas1 = FXCollections.observableArrayList("1","2","3","4"); 

试图尝试得到一些数据的展现出来,但似乎没有奏效。

+0

您是否在FXML中指定您的控制器(通过fx:controller属性)? –

+0

是的,我这样做 Dan

+0

在'private void initialize()' – c0der

回答

2

我假设你正在以“标准”方式使生命控制器起作用。我在想,private void initialize()方法永远不会被调用。您的ServeController不实现Initializable接口。正确的代码应该如下:

public class ServeController implements Initializable { 

    public ObservableList<String> pizzas1 = FXCollections.observableArrayList(); 

    @FXML 
    public ComboBox<String> comboBox; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     comboBox.getItems().addAll(
       "[email protected]", 
       "[email protected]", 
       "[email protected]", 
       "[email protected]", 
       "[email protected]" 
     ); 
    } 
} 
+0

之前添加'@ FXML'实现'Initializable'不是必需的。唯一的问题是除了'public'以外的所有成员对'FXMLLoader'都是不可见的,除非它们用'@ FXML'注解。 ([请参阅c0der的答案](https://stackoverflow.com/a/44364430/2991525)) – fabian

2

我认为如果你添加打印输出initialize()你会看到,它是不被调用。
要获得initialize()引用,您需要注释它:@FXML private void initialize()