2013-08-21 62 views
4

我剛開始使用JavaFX,並且已經需要一些建議。我使用MainApplication的start(Stage ...)方法中的FXMLLoader加載了applicaton.fxml(使用Oracle SceneBuiler創建),該方法在我的application.fxml文件中指定了一個ApplicationController。JavaFX /如何在啓動時加載/填充值?

<AnchorPane id="AnchorPane" disable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" styleClass="theme" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="app.AppController"> 
...more code here... 
<ComboBox id="cmb_locations" fx:id="cmb_locations"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="Item 1" /> 
      <String fx:value="Item 2" /> 
      <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
</ComboBox> 

現在,我在applicaton.fxml,其中有三個項目(默認項)一ComboBox。我需要的是在創業期間用我自己的價值觀填充ComboBox。有誰知道如何做到這一點,並在哪裏把相關的代碼片段(app.AppController或類似的東西)?提前致謝。

回答

7

你有一些控制器爲你fxml文件。你可以訪問你的ComboBox。你可以把這個代碼設置爲元素列表(可能在initialize()方法中):

如果你不想編輯你的fxml文件,你可以在設置新列表之前先用cmb_locations.getItems().clear();清除列表。

public class ApplicationController implements Initializable { 

    @FXML 
    ComboBox cmb_locations; 
    ... 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     ... 
     List<String> list = new ArrayList<String>(); 
     list.add("Item A"); 
     list.add("Item B"); 
     list.add("Item C"); 
     ObservableList obList = FXCollections.observableList(list); 
     cmb_locations.getItems().clear(); 
     cmb_locations.setItems(obList); 
     ... 
    } 
} 
+0

btw。 'public void initialize(URL location,ResourceBundle resources)'和(由SceneBuilder創建的)'void initialize()'方法有什麼區別? – nyyrikki

+0

我正在使用NetBeans,當我從模式創建帶有控制器的fxml時,它會爲此方法生成'public'訪問權限。我在Initializable接口(javafx ver 2.2.25)中將此方法設置爲'public'。所以不確定SB爲什麼要採用封裝私有。 – flyer

+0

@nyyrikki'公共無效初始化(URL位置,ResourceBundle資源)'是舊版本。現在你只需要寫'void initialize();'新版本。 – UnKnown

3

在你的控制器中,你實現了Initializable接口。 然後在初始化方法中,您只需添加代碼以加載組合框。

2

開始通過在FXML「項目1」,「項目2」去掉默認值... 正好有

<FXCollections fx:factory="observableArrayList"> 
    </FXCollections> 

和您的控制器上,如果你想找回您的組合框,你必須把它注射通過做

@FXML 
ComboBox cmb_locations 

public void initialize(URL url, ResourceBundle resource) { 
//here populate your combobox 
} 
相關問題