2013-09-28 10 views
7

Ho un elenco di valori che desidero compilare in una casella combinata in javaFx. questo è il mio combo.xmlCome popolare i valori di un elenco in una casella combinata in JavaFx

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="- Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"> 
<children> 
<ComboBox id="comboId" layoutX="210.0" layoutY="108.0" prefHeight="27.0" prefWidth="102.0" promptText="Select"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
     <String fx:value="Item 1" /> 
     <String fx:value="Item 2" /> 
     <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
    </Com boBox> 
    </children> 
    </AnchorPane> 

questo è il mio principale

public class JavaFXExperiment extends Application { 
@Override 
public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("combo.fxml")); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    final ComboBox comboId = new ComboBox(); 
    comboId.getItems().addAll(
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "michae[email protected]"); 
} 
    public static void main(String[] args) { 
    launch(args); 
} 
} 

Questo è il mio file xml e la classe principale che voglio mostrare quei valori nel combobox.anyone si prega di aiuto

risposta

18

Devi creare un controller e assegnarlo con lo schermo FXML.

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="- Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" fx:controller="MyController" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"> 
<children> 
<ComboBox fx:id="myCombobox" id="comboId" layoutX="210.0" layoutY="108.0" prefHeight="27.0" prefWidth="102.0" promptText="Select"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
     <String fx:value="Item 1" /> 
     <String fx:value="Item 2" /> 
     <String fx:value="Item 3" /> 
     </FXCollections> 
    </items> 
    </ComboBox> 
    </children> 
    </AnchorPane> 

Allora la vostra classe principale sarà,

public class JavaFXExperiment extends Application { 
@Override 
public void start(Stage stage) throws Exception { 

    FXMLLoader loader = new FXMLLoader(getClass().getResource("combo.fxml")); 
    Parent root = loader.load(); 

    MyController myController = loader.getController(); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 

    //Set Data to FXML through controller 
    myController.setData(); 
} 
    public static void main(String[] args) { 
    launch(args); 
} 
} 

ed il controller sarà,

public class MyController implements Initializable 
{ 

@FXML 
public Combobox myCombobox; 

@Override 
    public void initialize(URL url, ResourceBundle rb) { 
} 

public void setData(){ 

myCombobox.getItems().clear(); 

myCombobox.getItems().addAll(
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]", 
      "[email protected]"); 

} 
} 
+0

Grazie, questo funziona anche quando si apre una nuova finestra. – lmiguelvargasf

+0

'@FXML ComboBox pubblico myCombobox;' – saikosen

Problemi correlati